Rust-GPU / Rust-GPU/rust-gpu

GEP not implemented for type struct [_; 0]

オープン
#151 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

bug
主要言語
Rust
スター
3.4k
フォーク
125
PR マージ指標
30日以内にマージされた PR はありません

説明

Original issue: https://github.com/EmbarkStudios/rust-gpu/issues/1075

Expected Behaviour

This compiles fine with rustc (I guess this bit is probably eliminated?).

Example & Steps To Reproduce

I was using const generic parameters to determine the length of some arrays. At some point, a base case ended up declaring a zero-length array, like so:

#![cfg_attr(target_arch = "spirv", no_std)]
use spirv_std::spirv;

fn example<const LENGTH: usize>() {
    let mut array = [0; LENGTH];
    for i in 0..array.len() {
        array[i] += i;
    }
}

#[spirv(compute(threads(1, 1, 1)))]
pub fn compute() {
    example::<0>();
}

Resulting in:

error: GEP not implemented for type struct [usize; 0] {  }
 --> examples/shaders/compute-shader/src/lib.rs:7:9
  |
7 |         array[i] += i;
  |         ^^^^^^^^^^^^^

System Info

* rustc: 1.71.0-nightly (1a5f8bce7 2023-05-26)

* rust-gpu: [b2e5eb7](https://github.com/EmbarkStudios/rust-gpu/commit/b2e5eb75951545782b121665c20f9f1c66fe5bdd)

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、長さゼロの const ジェネリック配列を使って examples/shaders/compute-shader/src/lib.rs のエラーを再現し、GEP の失敗を確認してください。報告された型 struct [usize; 0] のインデックス処理を扱うコンパイラの経路を追跡してください。完了の条件は、GEP エラーなしで例が正常にコンパイルされ、その挙動が回帰テストでカバーされることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rust
領域
compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。