Skip to content

Commit

Permalink
Auto merge of rust-lang#84099 - tmiasko:asm-only-x86_64, r=Amanieu
Browse files Browse the repository at this point in the history
Check for asm support in UI tests that require it

Add `needs-asm-support` compiletest directive, and use it in asm tests
that require asm support without relying on any architecture specific
features.

Closes rust-lang#84038.
  • Loading branch information
bors committed Apr 13, 2021
2 parents 23aef90 + da40e69 commit 2e7eb85
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/test/ui/asm/naked-invalid-attr.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Checks that #[naked] attribute can be placed on function definitions only.
//
// ignore-wasm32 asm unsupported
// needs-asm-support
#![feature(asm)]
#![feature(naked_functions)]
#![naked] //~ ERROR should be applied to a function definition
Expand Down
1 change: 1 addition & 0 deletions src/test/ui/feature-gates/feature-gate-naked_functions.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// needs-asm-support
#![feature(asm)]

#[naked]
Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/feature-gates/feature-gate-naked_functions.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0658]: the `#[naked]` attribute is an experimental feature
--> $DIR/feature-gate-naked_functions.rs:3:1
--> $DIR/feature-gate-naked_functions.rs:4:1
|
LL | #[naked]
| ^^^^^^^^
Expand All @@ -8,7 +8,7 @@ LL | #[naked]
= help: add `#![feature(naked_functions)]` to the crate attributes to enable

error[E0658]: the `#[naked]` attribute is an experimental feature
--> $DIR/feature-gate-naked_functions.rs:9:1
--> $DIR/feature-gate-naked_functions.rs:10:1
|
LL | #[naked]
| ^^^^^^^^
Expand Down
1 change: 1 addition & 0 deletions src/test/ui/rfc-2091-track-caller/error-with-naked.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// needs-asm-support
#![feature(asm, naked_functions)]

#[track_caller] //~ ERROR cannot use `#[track_caller]` with `#[naked]`
Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/rfc-2091-track-caller/error-with-naked.stderr
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
error[E0736]: cannot use `#[track_caller]` with `#[naked]`
--> $DIR/error-with-naked.rs:3:1
--> $DIR/error-with-naked.rs:4:1
|
LL | #[track_caller]
| ^^^^^^^^^^^^^^^

error[E0736]: cannot use `#[track_caller]` with `#[naked]`
--> $DIR/error-with-naked.rs:12:5
--> $DIR/error-with-naked.rs:13:5
|
LL | #[track_caller]
| ^^^^^^^^^^^^^^^
Expand Down
5 changes: 5 additions & 0 deletions src/tools/compiletest/src/header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ impl EarlyProps {
let mut props = EarlyProps::default();
let rustc_has_profiler_support = env::var_os("RUSTC_PROFILER_SUPPORT").is_some();
let rustc_has_sanitizer_support = env::var_os("RUSTC_SANITIZER_SUPPORT").is_some();
let has_asm_support = util::has_asm_support(&config.target);
let has_asan = util::ASAN_SUPPORTED_TARGETS.contains(&&*config.target);
let has_lsan = util::LSAN_SUPPORTED_TARGETS.contains(&&*config.target);
let has_msan = util::MSAN_SUPPORTED_TARGETS.contains(&&*config.target);
Expand Down Expand Up @@ -76,6 +77,10 @@ impl EarlyProps {
props.ignore = true;
}

if !has_asm_support && config.parse_name_directive(ln, "needs-asm-support") {
props.ignore = true;
}

if !rustc_has_profiler_support && config.parse_needs_profiler_support(ln) {
props.ignore = true;
}
Expand Down
11 changes: 11 additions & 0 deletions src/tools/compiletest/src/header/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,17 @@ fn sanitizers() {
assert!(parse_rs(&config, "// needs-sanitizer-thread").ignore);
}

#[test]
fn asm_support() {
let mut config = config();

config.target = "avr-unknown-gnu-atmega328".to_owned();
assert!(parse_rs(&config, "// needs-asm-support").ignore);

config.target = "i686-unknown-netbsd".to_owned();
assert!(!parse_rs(&config, "// needs-asm-support").ignore);
}

#[test]
fn test_extract_version_range() {
use super::{extract_llvm_version, extract_version_range};
Expand Down
9 changes: 9 additions & 0 deletions src/tools/compiletest/src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,15 @@ const BIG_ENDIAN: &[&str] = &[
"sparcv9",
];

static ASM_SUPPORTED_ARCHS: &[&str] = &[
"x86", "x86_64", "arm", "aarch64", "riscv32", "riscv64", "nvptx64", "hexagon", "mips",
"mips64", "spirv", "wasm32",
];

pub fn has_asm_support(triple: &str) -> bool {
ASM_SUPPORTED_ARCHS.contains(&get_arch(triple))
}

pub fn matches_os(triple: &str, name: &str) -> bool {
// For the wasm32 bare target we ignore anything also ignored on emscripten
// and then we also recognize `wasm32-bare` as the os for the target
Expand Down

0 comments on commit 2e7eb85

Please sign in to comment.