From 237d8ad703d1eabe7e990b43dfc4fc4b9808e3a6 Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Mon, 13 Oct 2025 10:17:43 +0300 Subject: [PATCH] abi: use `PassMode::Direct` even for data types that can be passed as scalar pairs. --- crates/rustc_codegen_spirv/src/abi.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/rustc_codegen_spirv/src/abi.rs b/crates/rustc_codegen_spirv/src/abi.rs index 3c0c025845..f80bf6092c 100644 --- a/crates/rustc_codegen_spirv/src/abi.rs +++ b/crates/rustc_codegen_spirv/src/abi.rs @@ -69,6 +69,15 @@ pub(crate) fn provide(providers: &mut Providers) { // arg.make_direct_deprecated(); + // FIXME(eddyb) detect `#[rust_gpu::vector::v1]` more specifically, + // to avoid affecting anything should actually be passed as a pair. + if let PassMode::Pair(..) = arg.mode { + // HACK(eddyb) this avoids breaking e.g. `&[T]` pairs. + if let TyKind::Adt(..) = arg.layout.ty.kind() { + arg.mode = PassMode::Direct(ArgAttributes::new()); + } + } + // Avoid pointlessly passing ZSTs, just like the official Rust ABI. if arg.layout.is_zst() { arg.mode = PassMode::Ignore;