Skip to content

GEP not implemented for type struct [_; 0] #151

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
Firestar99 opened this issue Nov 18, 2024 · 3 comments · May be fixed by #171
Open

GEP not implemented for type struct [_; 0] #151

Firestar99 opened this issue Nov 18, 2024 · 3 comments · May be fixed by #171
Labels
bug Something isn't working

Comments

@Firestar99
Copy link
Member

Firestar99 commented Nov 18, 2024

Original issue: EmbarkStudios/rust-gpu#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)
@Firestar99 Firestar99 added the bug Something isn't working label Nov 18, 2024
@JulianKnodt
Copy link
Contributor

Is it alright if I check this out?

@Firestar99
Copy link
Member Author

Feel free to give it a try. This old patch won't be directly cherry-pickable due to some larger gep changes.

@JulianKnodt
Copy link
Contributor

JulianKnodt commented Dec 7, 2024

I'm a bit confused what should be emitted, since it doesn't make sense to have a GEP to an array with zero elements. Should it just emit a constant value?

For context I added the patch you linked here (which is very WIP), but it still fails with this:
image

Ah I realize we're hitting this because we're emitting a struct and not an array now

@JulianKnodt JulianKnodt linked a pull request Dec 8, 2024 that will close this issue
LegNeato pushed a commit to LegNeato/rust-gpu that referenced this issue Mar 26, 2025
std::process::Command.output() doesn't return error on non-zero exit, only
when command.inner() fails.

If `which nvcc` can't find `nvcc` it returns like (ExitStatus(-1), "", "")
and causes a panic in the return of the function.

Instead, panic on non-zero return with an informational diagnostic message.
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants