From 6d3d61f1b0965fb1eefe3deeba21466aa6fbf514 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Mon, 9 Dec 2024 10:06:51 +0000 Subject: [PATCH] Evaluate constants in SIMD vec lengths before rejecting them --- compiler/rustc_hir_analysis/src/check/intrinsicck.rs | 1 + tests/ui/asm/named_const_simd_vec_len.rs | 2 +- tests/ui/asm/named_const_simd_vec_len.stderr | 10 ---------- 3 files changed, 2 insertions(+), 11 deletions(-) delete mode 100644 tests/ui/asm/named_const_simd_vec_len.stderr diff --git a/compiler/rustc_hir_analysis/src/check/intrinsicck.rs b/compiler/rustc_hir_analysis/src/check/intrinsicck.rs index df4da03f0f5..c4762b12358 100644 --- a/compiler/rustc_hir_analysis/src/check/intrinsicck.rs +++ b/compiler/rustc_hir_analysis/src/check/intrinsicck.rs @@ -83,6 +83,7 @@ impl<'a, 'tcx> InlineAsmCtxt<'a, 'tcx> { let (size, ty) = match elem_ty.kind() { ty::Array(ty, len) => { + let len = self.tcx.normalize_erasing_regions(self.typing_env, *len); if let Some(len) = len.try_to_target_usize(self.tcx) { (len, *ty) } else { diff --git a/tests/ui/asm/named_const_simd_vec_len.rs b/tests/ui/asm/named_const_simd_vec_len.rs index 8f2159077fc..7df4d922d5c 100644 --- a/tests/ui/asm/named_const_simd_vec_len.rs +++ b/tests/ui/asm/named_const_simd_vec_len.rs @@ -2,6 +2,7 @@ //! SIMD vector length constants instead of assuming they are literals. //@ only-x86_64 +//@ check-pass #![feature(repr_simd)] @@ -15,7 +16,6 @@ pub unsafe fn foo(a: Foo) { std::arch::asm!( "movaps {src}, {src}", src = in(xmm_reg) a, - //~^ ERROR: cannot use value of type `Foo` for inline assembly ); } diff --git a/tests/ui/asm/named_const_simd_vec_len.stderr b/tests/ui/asm/named_const_simd_vec_len.stderr deleted file mode 100644 index 184cc2b05e2..00000000000 --- a/tests/ui/asm/named_const_simd_vec_len.stderr +++ /dev/null @@ -1,10 +0,0 @@ -error: cannot use value of type `Foo` for inline assembly - --> $DIR/named_const_simd_vec_len.rs:17:27 - | -LL | src = in(xmm_reg) a, - | ^ - | - = note: only integers, floats, SIMD vectors, pointers and function pointers can be used as arguments for inline assembly - -error: aborting due to 1 previous error -