Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 38a9dff

Browse files
committedApr 23, 2025·
Auto merge of rust-lang#139309 - RalfJung:abi_unsupported_vector_types, r=<try>
make abi_unsupported_vector_types a hard error Fixes rust-lang#116558 by completing the transition; see that issue for context. The lint was introduced with Rust 1.84 and this has been shown in cargo's future breakage reports since Rust 1.85, released 6 weeks ago, and so far we got 0 complaints by users. There's not even a backlink on the tracking issue. We did a [crater run](rust-lang#127731 (comment)) when the lint was originally added and found no breakage. So I don't think we need another crater run now, but I can do one if the team prefers that. rust-lang#131800 is done, so for most current targets (in particular, all tier 1 and tier 2 targets) we have the information to implement this check (modulo the targets where we don't properly support SIMD vectors yet, see the sub-issues of rust-lang#116558). If a new target gets added in the future, it will default to reject all SIMD vector types until proper information is added, which is the default we want. This will need approval by for `@rust-lang/lang.` Cc `@workingjubilee` `@veluca93` try-job: test-various try-job: armhf-gnu
2 parents 645d0ad + 64d0bb2 commit 38a9dff

23 files changed

+147
-978
lines changed
 

‎compiler/rustc_codegen_cranelift/example/std_example.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
unboxed_closures
99
)]
1010
#![allow(internal_features)]
11-
// FIXME once abi_unsupported_vector_types is a hard error disable the foo test when the respective
12-
// target feature is not enabled.
13-
#![allow(abi_unsupported_vector_types)]
1411

1512
#[cfg(target_arch = "x86_64")]
1613
use std::arch::x86_64::*;

‎compiler/rustc_lint/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,11 @@ fn register_builtins(store: &mut LintStore) {
608608
"converted into hard error, see PR #139001 \
609609
<https://github.com/rust-lang/rust/issues/139001> for more information",
610610
);
611+
store.register_removed(
612+
"abi_unsupported_vector_types",
613+
"converted into hard error, \
614+
see <https://github.com/rust-lang/rust/issues/116558> for more information",
615+
);
611616
}
612617

613618
fn register_internals(store: &mut LintStore) {

‎compiler/rustc_lint_defs/src/builtin.rs

Lines changed: 0 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ declare_lint_pass! {
1616
/// that are used by other parts of the compiler.
1717
HardwiredLints => [
1818
// tidy-alphabetical-start
19-
ABI_UNSUPPORTED_VECTOR_TYPES,
2019
ABSOLUTE_PATHS_NOT_STARTING_WITH_CRATE,
2120
AMBIGUOUS_ASSOCIATED_ITEMS,
2221
AMBIGUOUS_GLOB_IMPORTS,
@@ -5027,74 +5026,6 @@ declare_lint! {
50275026
crate_level_only
50285027
}
50295028

5030-
declare_lint! {
5031-
/// The `abi_unsupported_vector_types` lint detects function definitions and calls
5032-
/// whose ABI depends on enabling certain target features, but those features are not enabled.
5033-
///
5034-
/// ### Example
5035-
///
5036-
/// ```rust,ignore (fails on non-x86_64)
5037-
/// extern "C" fn missing_target_feature(_: std::arch::x86_64::__m256) {
5038-
/// todo!()
5039-
/// }
5040-
///
5041-
/// #[target_feature(enable = "avx")]
5042-
/// unsafe extern "C" fn with_target_feature(_: std::arch::x86_64::__m256) {
5043-
/// todo!()
5044-
/// }
5045-
///
5046-
/// fn main() {
5047-
/// let v = unsafe { std::mem::zeroed() };
5048-
/// unsafe { with_target_feature(v); }
5049-
/// }
5050-
/// ```
5051-
///
5052-
/// This will produce:
5053-
///
5054-
/// ```text
5055-
/// warning: ABI error: this function call uses a avx vector type, which is not enabled in the caller
5056-
/// --> lint_example.rs:18:12
5057-
/// |
5058-
/// | unsafe { with_target_feature(v); }
5059-
/// | ^^^^^^^^^^^^^^^^^^^^^^ function called here
5060-
/// |
5061-
/// = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
5062-
/// = note: for more information, see issue #116558 <https://github.com/rust-lang/rust/issues/116558>
5063-
/// = help: consider enabling it globally (-C target-feature=+avx) or locally (#[target_feature(enable="avx")])
5064-
/// = note: `#[warn(abi_unsupported_vector_types)]` on by default
5065-
///
5066-
///
5067-
/// warning: ABI error: this function definition uses a avx vector type, which is not enabled
5068-
/// --> lint_example.rs:3:1
5069-
/// |
5070-
/// | pub extern "C" fn with_target_feature(_: std::arch::x86_64::__m256) {
5071-
/// | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function defined here
5072-
/// |
5073-
/// = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
5074-
/// = note: for more information, see issue #116558 <https://github.com/rust-lang/rust/issues/116558>
5075-
/// = help: consider enabling it globally (-C target-feature=+avx) or locally (#[target_feature(enable="avx")])
5076-
/// ```
5077-
///
5078-
///
5079-
///
5080-
/// ### Explanation
5081-
///
5082-
/// The C ABI for `__m256` requires the value to be passed in an AVX register,
5083-
/// which is only possible when the `avx` target feature is enabled.
5084-
/// Therefore, `missing_target_feature` cannot be compiled without that target feature.
5085-
/// A similar (but complementary) message is triggered when `with_target_feature` is called
5086-
/// by a function that does not enable the `avx` target feature.
5087-
///
5088-
/// Note that this lint is very similar to the `-Wpsabi` warning in `gcc`/`clang`.
5089-
pub ABI_UNSUPPORTED_VECTOR_TYPES,
5090-
Warn,
5091-
"this function call or definition uses a vector type which is not enabled",
5092-
@future_incompatible = FutureIncompatibleInfo {
5093-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
5094-
reference: "issue #116558 <https://github.com/rust-lang/rust/issues/116558>",
5095-
};
5096-
}
5097-
50985029
declare_lint! {
50995030
/// The `wasm_c_abi` lint detects usage of the `extern "C"` ABI of wasm that is affected
51005031
/// by a planned ABI change that has the goal of aligning Rust with the standard C ABI

‎compiler/rustc_monomorphize/src/errors.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,11 @@ pub(crate) struct UnknownCguCollectionMode<'a> {
7070
pub mode: &'a str,
7171
}
7272

73-
#[derive(LintDiagnostic)]
73+
#[derive(Diagnostic)]
7474
#[diag(monomorphize_abi_error_disabled_vector_type)]
7575
#[help]
7676
pub(crate) struct AbiErrorDisabledVectorType<'a> {
77+
#[primary_span]
7778
#[label]
7879
pub span: Span,
7980
pub required_feature: &'a str,
@@ -82,9 +83,10 @@ pub(crate) struct AbiErrorDisabledVectorType<'a> {
8283
pub is_call: bool,
8384
}
8485

85-
#[derive(LintDiagnostic)]
86+
#[derive(Diagnostic)]
8687
#[diag(monomorphize_abi_error_unsupported_vector_type)]
8788
pub(crate) struct AbiErrorUnsupportedVectorType<'a> {
89+
#[primary_span]
8890
#[label]
8991
pub span: Span,
9092
pub ty: Ty<'a>,

‎compiler/rustc_monomorphize/src/mono_checks/abi_check.rs

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use rustc_hir::{CRATE_HIR_ID, HirId};
55
use rustc_middle::mir::{self, Location, traversal};
66
use rustc_middle::ty::layout::LayoutCx;
77
use rustc_middle::ty::{self, Instance, InstanceKind, Ty, TyCtxt, TypingEnv};
8-
use rustc_session::lint::builtin::{ABI_UNSUPPORTED_VECTOR_TYPES, WASM_C_ABI};
8+
use rustc_session::lint::builtin::WASM_C_ABI;
99
use rustc_span::def_id::DefId;
1010
use rustc_span::{DUMMY_SP, Span, Symbol, sym};
1111
use rustc_target::callconv::{ArgAbi, Conv, FnAbi, PassMode};
@@ -50,34 +50,24 @@ fn do_check_simd_vector_abi<'tcx>(
5050
let feature = match feature_def.iter().find(|(bits, _)| size.bits() <= *bits) {
5151
Some((_, feature)) => feature,
5252
None => {
53-
let (span, hir_id) = loc();
54-
tcx.emit_node_span_lint(
55-
ABI_UNSUPPORTED_VECTOR_TYPES,
56-
hir_id,
53+
let (span, _hir_id) = loc();
54+
tcx.dcx().emit_err(errors::AbiErrorUnsupportedVectorType {
5755
span,
58-
errors::AbiErrorUnsupportedVectorType {
59-
span,
60-
ty: arg_abi.layout.ty,
61-
is_call,
62-
},
63-
);
56+
ty: arg_abi.layout.ty,
57+
is_call,
58+
});
6459
continue;
6560
}
6661
};
6762
if !have_feature(Symbol::intern(feature)) {
6863
// Emit error.
69-
let (span, hir_id) = loc();
70-
tcx.emit_node_span_lint(
71-
ABI_UNSUPPORTED_VECTOR_TYPES,
72-
hir_id,
64+
let (span, _hir_id) = loc();
65+
tcx.dcx().emit_err(errors::AbiErrorDisabledVectorType {
7366
span,
74-
errors::AbiErrorDisabledVectorType {
75-
span,
76-
required_feature: feature,
77-
ty: arg_abi.layout.ty,
78-
is_call,
79-
},
80-
);
67+
required_feature: feature,
68+
ty: arg_abi.layout.ty,
69+
is_call,
70+
});
8171
}
8272
}
8373
}

‎compiler/rustc_target/src/target_features.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -775,7 +775,7 @@ const RISCV_FEATURES_FOR_CORRECT_VECTOR_ABI: &'static [(u64, &'static str)] = &[
775775
(32768, "zvl32768b"),
776776
(65536, "zvl65536b"),
777777
];
778-
// Always warn on SPARC, as the necessary target features cannot be enabled in Rust at the moment.
778+
// Always error on SPARC, as the necessary target features cannot be enabled in Rust at the moment.
779779
const SPARC_FEATURES_FOR_CORRECT_VECTOR_ABI: &'static [(u64, &'static str)] = &[/*(64, "vis")*/];
780780

781781
const HEXAGON_FEATURES_FOR_CORRECT_VECTOR_ABI: &'static [(u64, &'static str)] =

‎tests/assembly/simd-bitmask.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,9 @@ pub unsafe extern "C" fn bitmask_m8x16(mask: m8x16) -> u16 {
6565
simd_bitmask(mask)
6666
}
6767

68-
// CHECK-LABEL: bitmask_m8x64
68+
// x86-avx512-LABEL: bitmask_m8x64
6969
#[no_mangle]
70+
#[cfg(x86_avx512)]
7071
pub unsafe extern "C" fn bitmask_m8x64(mask: m8x64) -> u64 {
7172
// The simd_bitmask intrinsic already uses the most significant bit, so no shift is necessary.
7273
// Note that x86 has no byte shift, llvm uses a word shift to move the least significant bit
@@ -128,8 +129,10 @@ pub unsafe extern "C" fn bitmask_m64x2(mask: m64x2) -> u8 {
128129
simd_bitmask(mask)
129130
}
130131

131-
// CHECK-LABEL: bitmask_m64x4
132+
// x86-avx2-LABEL: bitmask_m64x4
133+
// x86-avx512-LABEL: bitmask_m64x4
132134
#[no_mangle]
135+
#[cfg(any(x86_avx2, x86_avx512))]
133136
pub unsafe extern "C" fn bitmask_m64x4(mask: m64x4) -> u8 {
134137
// The simd_bitmask intrinsic already uses the most significant bit, so no shift is necessary.
135138
//

‎tests/assembly/simd-intrinsic-select.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,10 @@ pub unsafe extern "C" fn select_f64x2(mask: m64x2, a: f64x2, b: f64x2) -> f64x2
9999
simd_select(mask, a, b)
100100
}
101101

102-
// CHECK-LABEL: select_f64x4
102+
// x86-avx2-LABEL: select_f64x4
103+
// x86-avx512-LABEL: select_f64x4
103104
#[no_mangle]
105+
#[cfg(any(x86_avx2, x86_avx512))]
104106
pub unsafe extern "C" fn select_f64x4(mask: m64x4, a: f64x4, b: f64x4) -> f64x4 {
105107
// The parameter is a 256 bit vector which in the C abi is only valid for avx targets.
106108
//
@@ -113,8 +115,9 @@ pub unsafe extern "C" fn select_f64x4(mask: m64x4, a: f64x4, b: f64x4) -> f64x4
113115
simd_select(mask, a, b)
114116
}
115117

116-
// CHECK-LABEL: select_f64x8
118+
// x86-avx512-LABEL: select_f64x8
117119
#[no_mangle]
120+
#[cfg(x86_avx512)]
118121
pub unsafe extern "C" fn select_f64x8(mask: m64x8, a: f64x8, b: f64x8) -> f64x8 {
119122
// The parameter is a 256 bit vector which in the C abi is only valid for avx512 targets.
120123
//

‎tests/codegen/const-vector.rs

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#![feature(repr_simd)]
99
#![feature(rustc_attrs)]
1010
#![feature(simd_ffi)]
11+
#![feature(arm_target_feature)]
1112
#![allow(non_camel_case_types)]
1213

1314
// Setting up structs that can be used as const vectors
@@ -28,40 +29,21 @@ pub struct Simd<T, const N: usize>([T; N]);
2829

2930
extern "unadjusted" {
3031
fn test_i8x2(a: i8x2);
31-
}
32-
33-
extern "unadjusted" {
3432
fn test_i8x2_two_args(a: i8x2, b: i8x2);
35-
}
36-
37-
extern "unadjusted" {
3833
fn test_i8x2_mixed_args(a: i8x2, c: i32, b: i8x2);
39-
}
40-
41-
extern "unadjusted" {
4234
fn test_i8x2_arr(a: i8x2);
43-
}
44-
45-
extern "unadjusted" {
4635
fn test_f32x2(a: f32x2);
47-
}
48-
49-
extern "unadjusted" {
5036
fn test_f32x2_arr(a: f32x2);
51-
}
52-
53-
extern "unadjusted" {
5437
fn test_simd(a: Simd<i32, 4>);
55-
}
56-
57-
extern "unadjusted" {
5838
fn test_simd_unaligned(a: Simd<i32, 3>);
5939
}
6040

6141
// Ensure the packed variant of the simd struct does not become a const vector
6242
// if the size is not a power of 2
6343
// CHECK: %"Simd<i32, 3>" = type { [3 x i32] }
6444

45+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
46+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
6547
pub fn do_call() {
6648
unsafe {
6749
// CHECK: call void @test_i8x2(<2 x i8> <i8 32, i8 64>

‎tests/codegen/regparm-inreg.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// x86 only.
44

55
//@ add-core-stubs
6-
//@ compile-flags: --target i686-unknown-linux-gnu -Cno-prepopulate-passes -Copt-level=3
6+
//@ compile-flags: --target i686-unknown-linux-gnu -Cno-prepopulate-passes -Copt-level=3 -Ctarget-feature=+avx
77
//@ needs-llvm-components: x86
88

99
//@ revisions:regparm0 regparm1 regparm2 regparm3

‎tests/codegen/repr/transparent.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// For LoongArch: see codegen/loongarch-abi
1010

1111
#![crate_type = "lib"]
12-
#![feature(repr_simd, transparent_unions)]
12+
#![feature(repr_simd, transparent_unions, arm_target_feature)]
1313

1414
use std::marker::PhantomData;
1515

@@ -139,6 +139,8 @@ pub struct Vector(f32x4);
139139

140140
// CHECK: define{{.*}}<4 x float> @test_Vector(<4 x float> %_1)
141141
#[no_mangle]
142+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
143+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
142144
pub extern "C" fn test_Vector(_: Vector) -> Vector {
143145
loop {}
144146
}

‎tests/codegen/simd/extract-insert-dyn.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//@compile-flags: -C opt-level=3 -C no-prepopulate-passes
22

3-
#![feature(core_intrinsics, repr_simd)]
3+
#![feature(core_intrinsics, repr_simd, arm_target_feature)]
44
#![no_std]
55
#![crate_type = "lib"]
66
#![allow(non_camel_case_types)]
@@ -21,55 +21,71 @@ pub struct i8x16([i8; 16]);
2121
// CHECK-LABEL: dyn_simd_extract
2222
// CHECK: extractelement <16 x i8> %x, i32 %idx
2323
#[no_mangle]
24+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
25+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
2426
unsafe extern "C" fn dyn_simd_extract(x: i8x16, idx: u32) -> i8 {
2527
simd_extract_dyn(x, idx)
2628
}
2729

2830
// CHECK-LABEL: literal_dyn_simd_extract
2931
// CHECK: extractelement <16 x i8> %x, i32 7
3032
#[no_mangle]
33+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
34+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
3135
unsafe extern "C" fn literal_dyn_simd_extract(x: i8x16) -> i8 {
3236
simd_extract_dyn(x, 7)
3337
}
3438

3539
// CHECK-LABEL: const_dyn_simd_extract
3640
// CHECK: extractelement <16 x i8> %x, i32 7
3741
#[no_mangle]
42+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
43+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
3844
unsafe extern "C" fn const_dyn_simd_extract(x: i8x16) -> i8 {
3945
simd_extract_dyn(x, const { 3 + 4 })
4046
}
4147

4248
// CHECK-LABEL: const_simd_extract
4349
// CHECK: extractelement <16 x i8> %x, i32 7
4450
#[no_mangle]
51+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
52+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
4553
unsafe extern "C" fn const_simd_extract(x: i8x16) -> i8 {
4654
simd_extract(x, const { 3 + 4 })
4755
}
4856

4957
// CHECK-LABEL: dyn_simd_insert
5058
// CHECK: insertelement <16 x i8> %x, i8 %e, i32 %idx
5159
#[no_mangle]
60+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
61+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
5262
unsafe extern "C" fn dyn_simd_insert(x: i8x16, e: i8, idx: u32) -> i8x16 {
5363
simd_insert_dyn(x, idx, e)
5464
}
5565

5666
// CHECK-LABEL: literal_dyn_simd_insert
5767
// CHECK: insertelement <16 x i8> %x, i8 %e, i32 7
5868
#[no_mangle]
69+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
70+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
5971
unsafe extern "C" fn literal_dyn_simd_insert(x: i8x16, e: i8) -> i8x16 {
6072
simd_insert_dyn(x, 7, e)
6173
}
6274

6375
// CHECK-LABEL: const_dyn_simd_insert
6476
// CHECK: insertelement <16 x i8> %x, i8 %e, i32 7
6577
#[no_mangle]
78+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
79+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
6680
unsafe extern "C" fn const_dyn_simd_insert(x: i8x16, e: i8) -> i8x16 {
6781
simd_insert_dyn(x, const { 3 + 4 }, e)
6882
}
6983

7084
// CHECK-LABEL: const_simd_insert
7185
// CHECK: insertelement <16 x i8> %x, i8 %e, i32 7
7286
#[no_mangle]
87+
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
88+
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
7389
unsafe extern "C" fn const_simd_insert(x: i8x16, e: i8) -> i8x16 {
7490
simd_insert(x, const { 3 + 4 }, e)
7591
}

‎tests/run-make/simd-ffi/rmake.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,20 @@ fn main() {
5252
// enabled by-default for i686 and ARM; these features will be invalid
5353
// on some platforms, but LLVM just prints a warning so that's fine for
5454
// now.
55+
let target_feature = if target.starts_with("i686") || target.starts_with("x86") {
56+
"+sse2"
57+
} else if target.starts_with("arm") || target.starts_with("aarch64") {
58+
"-soft-float,+neon"
59+
} else if target.starts_with("mips") {
60+
"+msa,+fp64"
61+
} else {
62+
panic!("missing target_feature case for {target}");
63+
};
5564
rustc()
5665
.target(&target)
5766
.emit("llvm-ir,asm")
5867
.input("simd.rs")
59-
.arg("-Ctarget-feature=-soft-float,+neon,+sse")
68+
.arg(format!("-Ctarget-feature={target_feature}"))
6069
.arg(&format!("-Cextra-filename=-{target}"))
6170
.run();
6271
}

‎tests/ui/abi/simd-abi-checks-avx.rs

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
//@ only-x86_64
2-
//@ build-pass
3-
//@ ignore-pass (test emits codegen-time warnings)
2+
//@ build-fail
43
//@ compile-flags: -C target-feature=-avx
54

65
#![feature(avx512_target_feature)]
@@ -14,20 +13,17 @@ use std::arch::x86_64::*;
1413
struct Wrapper(__m256);
1514

1615
unsafe extern "C" fn w(_: Wrapper) {
17-
//~^ WARN requires the `avx` target feature, which is not enabled
18-
//~| WARNING this was previously accepted by the compiler
16+
//~^ ERROR: requires the `avx` target feature, which is not enabled
1917
todo!()
2018
}
2119

2220
unsafe extern "C" fn f(_: __m256) {
23-
//~^ WARN requires the `avx` target feature, which is not enabled
24-
//~| WARNING this was previously accepted by the compiler
21+
//~^ ERROR: requires the `avx` target feature, which is not enabled
2522
todo!()
2623
}
2724

2825
unsafe extern "C" fn g() -> __m256 {
29-
//~^ WARN requires the `avx` target feature, which is not enabled
30-
//~| WARNING this was previously accepted by the compiler
26+
//~^ ERROR: requires the `avx` target feature, which is not enabled
3127
todo!()
3228
}
3329

@@ -56,25 +52,20 @@ unsafe fn test() {
5652
unsafe fn in_closure() -> impl FnOnce() -> __m256 {
5753
#[inline(always)] // this disables target-feature inheritance
5854
|| g()
59-
//~^ WARNING requires the `avx` target feature, which is not enabled in the caller
60-
//~| WARNING this was previously accepted by the compiler
55+
//~^ ERROR requires the `avx` target feature, which is not enabled in the caller
6156
}
6257

6358
fn main() {
6459
unsafe {
6560
f(g());
66-
//~^ WARNING requires the `avx` target feature, which is not enabled in the caller
67-
//~| WARNING requires the `avx` target feature, which is not enabled in the caller
68-
//~| WARNING this was previously accepted by the compiler
69-
//~| WARNING this was previously accepted by the compiler
61+
//~^ ERROR requires the `avx` target feature, which is not enabled in the caller
62+
//~| ERROR requires the `avx` target feature, which is not enabled in the caller
7063
}
7164

7265
unsafe {
7366
gavx(favx());
74-
//~^ WARNING requires the `avx` target feature, which is not enabled in the caller
75-
//~| WARNING requires the `avx` target feature, which is not enabled in the caller
76-
//~| WARNING this was previously accepted by the compiler
77-
//~| WARNING this was previously accepted by the compiler
67+
//~^ ERROR requires the `avx` target feature, which is not enabled in the caller
68+
//~| ERROR requires the `avx` target feature, which is not enabled in the caller
7869
}
7970

8071
unsafe {
@@ -83,10 +74,8 @@ fn main() {
8374

8475
unsafe {
8576
w(Wrapper(g()));
86-
//~^ WARNING requires the `avx` target feature, which is not enabled in the caller
87-
//~| WARNING requires the `avx` target feature, which is not enabled in the caller
88-
//~| WARNING this was previously accepted by the compiler
89-
//~| WARNING this was previously accepted by the compiler
77+
//~^ ERROR requires the `avx` target feature, which is not enabled in the caller
78+
//~| ERROR requires the `avx` target feature, which is not enabled in the caller
9079
}
9180

9281
unsafe {
@@ -99,8 +88,7 @@ fn main() {
9988
fn some_extern() -> __m256;
10089
}
10190
some_extern();
102-
//~^ WARNING requires the `avx` target feature, which is not enabled in the caller
103-
//~| WARNING this was previously accepted by the compiler
91+
//~^ ERROR requires the `avx` target feature, which is not enabled in the caller
10492
}
10593
}
10694

‎tests/ui/abi/simd-abi-checks-avx.stderr

Lines changed: 27 additions & 176 deletions
Large diffs are not rendered by default.
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
//! At the time of writing, the list of "which target feature enables which vector size" is empty
2+
//! for SPARC. Ensure that this leads to all vector sizes causing an error.
13
//@ add-core-stubs
24
//@ needs-llvm-components: sparc
35
//@ compile-flags: --target=sparc-unknown-none-elf --crate-type=rlib
4-
//@ build-pass
5-
//@ ignore-pass (test emits codegen-time warnings)
6+
//@ build-fail
67
#![no_core]
78
#![feature(no_core, repr_simd)]
89
#![allow(improper_ctypes_definitions)]
@@ -14,5 +15,4 @@ use minicore::*;
1415
pub struct SimdVec([i32; 4]);
1516

1617
pub extern "C" fn pass_by_vec(_: SimdVec) {}
17-
//~^ WARN this function definition uses SIMD vector type `SimdVec` which is not currently supported with the chosen ABI
18-
//~| WARNING this was previously accepted by the compiler
18+
//~^ ERROR: this function definition uses SIMD vector type `SimdVec` which is not currently supported with the chosen ABI
Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,8 @@
1-
warning: this function definition uses SIMD vector type `SimdVec` which is not currently supported with the chosen ABI
2-
--> $DIR/simd-abi-checks-empty-list.rs:16:1
1+
error: this function definition uses SIMD vector type `SimdVec` which is not currently supported with the chosen ABI
2+
--> $DIR/simd-abi-checks-empty-list.rs:17:1
33
|
44
LL | pub extern "C" fn pass_by_vec(_: SimdVec) {}
55
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function defined here
6-
|
7-
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
8-
= note: for more information, see issue #116558 <https://github.com/rust-lang/rust/issues/116558>
9-
= note: `#[warn(abi_unsupported_vector_types)]` on by default
10-
11-
warning: 1 warning emitted
126

13-
Future incompatibility report: Future breakage diagnostic:
14-
warning: this function definition uses SIMD vector type `SimdVec` which is not currently supported with the chosen ABI
15-
--> $DIR/simd-abi-checks-empty-list.rs:16:1
16-
|
17-
LL | pub extern "C" fn pass_by_vec(_: SimdVec) {}
18-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function defined here
19-
|
20-
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
21-
= note: for more information, see issue #116558 <https://github.com/rust-lang/rust/issues/116558>
22-
= note: `#[warn(abi_unsupported_vector_types)]` on by default
7+
error: aborting due to 1 previous error
238

‎tests/ui/abi/simd-abi-checks-s390x.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#![no_core]
1414
#![crate_type = "lib"]
1515
#![allow(non_camel_case_types, improper_ctypes_definitions)]
16-
#![deny(abi_unsupported_vector_types)]
1716

1817
extern crate minicore;
1918
use minicore::*;
@@ -38,13 +37,11 @@ impl<T: Copy> Copy for TransparentWrapper<T> {}
3837
#[no_mangle]
3938
extern "C" fn vector_ret_small(x: &i8x8) -> i8x8 {
4039
//~^ ERROR requires the `vector` target feature, which is not enabled
41-
//~^^ WARN this was previously accepted
4240
*x
4341
}
4442
#[no_mangle]
4543
extern "C" fn vector_ret(x: &i8x16) -> i8x16 {
4644
//~^ ERROR requires the `vector` target feature, which is not enabled
47-
//~^^ WARN this was previously accepted
4845
*x
4946
}
5047
#[no_mangle]
@@ -93,15 +90,13 @@ extern "C" fn vector_transparent_wrapper_ret_small(
9390
x: &TransparentWrapper<i8x8>,
9491
) -> TransparentWrapper<i8x8> {
9592
//~^^^ ERROR requires the `vector` target feature, which is not enabled
96-
//~^^^^ WARN this was previously accepted
9793
*x
9894
}
9995
#[no_mangle]
10096
extern "C" fn vector_transparent_wrapper_ret(
10197
x: &TransparentWrapper<i8x16>,
10298
) -> TransparentWrapper<i8x16> {
10399
//~^^^ ERROR requires the `vector` target feature, which is not enabled
104-
//~^^^^ WARN this was previously accepted
105100
*x
106101
}
107102
#[no_mangle]
@@ -115,13 +110,11 @@ extern "C" fn vector_transparent_wrapper_ret_large(
115110
#[no_mangle]
116111
extern "C" fn vector_arg_small(x: i8x8) -> i64 {
117112
//~^ ERROR requires the `vector` target feature, which is not enabled
118-
//~^^ WARN this was previously accepted
119113
unsafe { *(&x as *const i8x8 as *const i64) }
120114
}
121115
#[no_mangle]
122116
extern "C" fn vector_arg(x: i8x16) -> i64 {
123117
//~^ ERROR requires the `vector` target feature, which is not enabled
124-
//~^^ WARN this was previously accepted
125118
unsafe { *(&x as *const i8x16 as *const i64) }
126119
}
127120
#[no_mangle]
@@ -133,13 +126,11 @@ extern "C" fn vector_arg_large(x: i8x32) -> i64 {
133126
#[no_mangle]
134127
extern "C" fn vector_wrapper_arg_small(x: Wrapper<i8x8>) -> i64 {
135128
//~^ ERROR requires the `vector` target feature, which is not enabled
136-
//~^^ WARN this was previously accepted
137129
unsafe { *(&x as *const Wrapper<i8x8> as *const i64) }
138130
}
139131
#[no_mangle]
140132
extern "C" fn vector_wrapper_arg(x: Wrapper<i8x16>) -> i64 {
141133
//~^ ERROR requires the `vector` target feature, which is not enabled
142-
//~^^ WARN this was previously accepted
143134
unsafe { *(&x as *const Wrapper<i8x16> as *const i64) }
144135
}
145136
#[no_mangle]
@@ -151,13 +142,11 @@ extern "C" fn vector_wrapper_arg_large(x: Wrapper<i8x32>) -> i64 {
151142
#[no_mangle]
152143
extern "C" fn vector_transparent_wrapper_arg_small(x: TransparentWrapper<i8x8>) -> i64 {
153144
//~^ ERROR requires the `vector` target feature, which is not enabled
154-
//~^^ WARN this was previously accepted
155145
unsafe { *(&x as *const TransparentWrapper<i8x8> as *const i64) }
156146
}
157147
#[no_mangle]
158148
extern "C" fn vector_transparent_wrapper_arg(x: TransparentWrapper<i8x16>) -> i64 {
159149
//~^ ERROR requires the `vector` target feature, which is not enabled
160-
//~^^ WARN this was previously accepted
161150
unsafe { *(&x as *const TransparentWrapper<i8x16> as *const i64) }
162151
}
163152
#[no_mangle]

‎tests/ui/abi/simd-abi-checks-s390x.z10.stderr

Lines changed: 10 additions & 199 deletions
Large diffs are not rendered by default.

‎tests/ui/abi/simd-abi-checks-s390x.z13_no_vector.stderr

Lines changed: 10 additions & 199 deletions
Large diffs are not rendered by default.

‎tests/ui/abi/simd-abi-checks-s390x.z13_soft_float.stderr

Lines changed: 10 additions & 199 deletions
Large diffs are not rendered by default.

‎tests/ui/abi/simd-abi-checks-sse.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
//@ compile-flags: --crate-type=rlib --target=i586-unknown-linux-gnu
44
//@ compile-flags: -Ctarget-cpu=pentium4 -C target-feature=-sse,-sse2
55
//@ add-core-stubs
6-
//@ build-pass
7-
//@ ignore-pass (test emits codegen-time warnings)
6+
//@ build-fail
87
//@ needs-llvm-components: x86
98
#![feature(no_core, repr_simd)]
109
#![no_core]
@@ -18,6 +17,5 @@ pub struct SseVector([i64; 2]);
1817

1918
#[no_mangle]
2019
pub unsafe extern "C" fn f(_: SseVector) {
21-
//~^ WARN this function definition uses SIMD vector type `SseVector` which (with the chosen ABI) requires the `sse` target feature, which is not enabled
22-
//~| WARNING this was previously accepted by the compiler
20+
//~^ ERROR: this function definition uses SIMD vector type `SseVector` which (with the chosen ABI) requires the `sse` target feature, which is not enabled
2321
}
Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,10 @@
1-
warning: this function definition uses SIMD vector type `SseVector` which (with the chosen ABI) requires the `sse` target feature, which is not enabled
2-
--> $DIR/simd-abi-checks-sse.rs:20:1
1+
error: this function definition uses SIMD vector type `SseVector` which (with the chosen ABI) requires the `sse` target feature, which is not enabled
2+
--> $DIR/simd-abi-checks-sse.rs:19:1
33
|
44
LL | pub unsafe extern "C" fn f(_: SseVector) {
55
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function defined here
66
|
7-
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
8-
= note: for more information, see issue #116558 <https://github.com/rust-lang/rust/issues/116558>
97
= help: consider enabling it globally (`-C target-feature=+sse`) or locally (`#[target_feature(enable="sse")]`)
10-
= note: `#[warn(abi_unsupported_vector_types)]` on by default
118

12-
warning: 1 warning emitted
13-
14-
Future incompatibility report: Future breakage diagnostic:
15-
warning: this function definition uses SIMD vector type `SseVector` which (with the chosen ABI) requires the `sse` target feature, which is not enabled
16-
--> $DIR/simd-abi-checks-sse.rs:20:1
17-
|
18-
LL | pub unsafe extern "C" fn f(_: SseVector) {
19-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function defined here
20-
|
21-
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
22-
= note: for more information, see issue #116558 <https://github.com/rust-lang/rust/issues/116558>
23-
= help: consider enabling it globally (`-C target-feature=+sse`) or locally (`#[target_feature(enable="sse")]`)
24-
= note: `#[warn(abi_unsupported_vector_types)]` on by default
9+
error: aborting due to 1 previous error
2510

0 commit comments

Comments
 (0)
This repository has been archived.