diff --git a/crates/rustc_codegen_spirv/src/builder/builder_methods.rs b/crates/rustc_codegen_spirv/src/builder/builder_methods.rs index d86db1cbd00..c1f653c7052 100644 --- a/crates/rustc_codegen_spirv/src/builder/builder_methods.rs +++ b/crates/rustc_codegen_spirv/src/builder/builder_methods.rs @@ -1600,9 +1600,9 @@ impl<'a, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'tcx> { // Same note and TODO as exactudiv simple_op! { exactsdiv, - sint: s_div, + int: s_div, fold_const { - sint(a, b) => a.checked_div(b)?; + int(a, b) => a.checked_div(b)?; } } simple_op! {fdiv, float: f_div} @@ -1648,9 +1648,9 @@ impl<'a, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'tcx> { } simple_uni_op! { neg, - sint: s_negate, + int: s_negate, fold_const { - sint(a) => a.checked_neg()?; + int(a) => a.checked_neg()?; } } simple_uni_op! {fneg, float: f_negate} diff --git a/crates/rustc_codegen_spirv/src/codegen_cx/constant.rs b/crates/rustc_codegen_spirv/src/codegen_cx/constant.rs index bf874130e83..5c850bff2b7 100644 --- a/crates/rustc_codegen_spirv/src/codegen_cx/constant.rs +++ b/crates/rustc_codegen_spirv/src/codegen_cx/constant.rs @@ -573,9 +573,10 @@ impl<'tcx> CodegenCx<'tcx> { SpirvType::Array { count, .. } => { u64::try_from(self.builder.lookup_const_scalar(count).unwrap()).unwrap() } - SpirvType::RuntimeArray { .. } => { - (alloc.inner().size() - offset).bytes() / stride.bytes() - } + SpirvType::RuntimeArray { .. } => (alloc.inner().size() - offset) + .bytes() + .checked_div(stride.bytes()) + .unwrap_or(0), _ => unreachable!(), }; diff --git a/examples/shaders/compute-shader/src/lib.rs b/examples/shaders/compute-shader/src/lib.rs index 16f91439004..c9408c2668a 100644 --- a/examples/shaders/compute-shader/src/lib.rs +++ b/examples/shaders/compute-shader/src/lib.rs @@ -46,6 +46,12 @@ pub fn main_cs( #[spirv(global_invocation_id)] id: UVec3, #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] prime_indices: &mut [u32], ) { - let index = id.x as usize; + let index = id.x as usize + + core::mem::size_of_val( + const { + struct S(T); + &S([]) as &S<[()]> + }, + ); prime_indices[index] = collatz(prime_indices[index]).unwrap_or(u32::MAX); }