From 54b26f49e6d30aefcbf206ee5cfcf6122503553c Mon Sep 17 00:00:00 2001 From: Oleksii Lozovskyi Date: Sun, 2 Oct 2022 12:58:05 +0900 Subject: [PATCH] Test XRay only for supported targets Now that the compiler accepts "-Z instrument-xray" option only when targeting one of the supported targets, make sure to not run the codegen tests where the compiler will fail. Like with other compiletests, we don't have access to internals, so simply hardcode a list of supported architectures here. --- src/tools/compiletest/src/header.rs | 2 ++ src/tools/compiletest/src/util.rs | 13 +++++++++++++ tests/codegen/instrument-xray/basic.rs | 1 + tests/codegen/instrument-xray/options-combine.rs | 1 + tests/codegen/instrument-xray/options-override.rs | 1 + tests/ui/instrument-xray/flags-always-never-1.rs | 1 + tests/ui/instrument-xray/flags-always-never-2.rs | 1 + tests/ui/instrument-xray/flags-basic.rs | 1 + tests/ui/instrument-xray/flags-dupe-always.rs | 1 + tests/ui/instrument-xray/flags-dupe-ignore-loops.rs | 1 + 10 files changed, 23 insertions(+) diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index 45fd87bea9bb5..e11ebca6ea9af 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -941,6 +941,7 @@ pub fn make_test_description( let has_hwasan = util::HWASAN_SUPPORTED_TARGETS.contains(&&*config.target); let has_memtag = util::MEMTAG_SUPPORTED_TARGETS.contains(&&*config.target); let has_shadow_call_stack = util::SHADOWCALLSTACK_SUPPORTED_TARGETS.contains(&&*config.target); + let has_xray = util::XRAY_SUPPORTED_TARGETS.contains(&&*config.target); // For tests using the `needs-rust-lld` directive (e.g. for `-Zgcc-ld=lld`), we need to find // whether `rust-lld` is present in the compiler under test. @@ -1019,6 +1020,7 @@ pub fn make_test_description( && config.parse_name_directive(ln, "needs-sanitizer-shadow-call-stack") ); reason!(!config.can_unwind() && config.parse_name_directive(ln, "needs-unwind")); + reason!(!has_xray && config.parse_name_directive(ln, "needs-xray")); reason!( config.target == "wasm32-unknown-unknown" && config.parse_name_directive(ln, directives::CHECK_RUN_RESULTS) diff --git a/src/tools/compiletest/src/util.rs b/src/tools/compiletest/src/util.rs index ff7e8df987816..67f49bb6397c2 100644 --- a/src/tools/compiletest/src/util.rs +++ b/src/tools/compiletest/src/util.rs @@ -78,6 +78,19 @@ pub const MEMTAG_SUPPORTED_TARGETS: &[&str] = pub const SHADOWCALLSTACK_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-android"]; +pub const XRAY_SUPPORTED_TARGETS: &[&str] = &[ + "aarch64-linux-android", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-linux-musl", + "x86_64-linux-android", + "x86_64-unknown-freebsd", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-linux-musl", + "x86_64-unknown-netbsd", + "x86_64-unknown-none-linuxkernel", + "x86_64-unknown-openbsd", +]; + pub fn make_new_path(path: &str) -> String { assert!(cfg!(windows)); // Windows just uses PATH as the library search path, so we have to diff --git a/tests/codegen/instrument-xray/basic.rs b/tests/codegen/instrument-xray/basic.rs index 9c128767747e7..d3e49d5317442 100644 --- a/tests/codegen/instrument-xray/basic.rs +++ b/tests/codegen/instrument-xray/basic.rs @@ -1,5 +1,6 @@ // Checks that `-Z instrument-xray` produces expected instrumentation. // +// needs-xray // compile-flags: -Z instrument-xray=always #![crate_type = "lib"] diff --git a/tests/codegen/instrument-xray/options-combine.rs b/tests/codegen/instrument-xray/options-combine.rs index 0c1992318f576..f7e500b65f62d 100644 --- a/tests/codegen/instrument-xray/options-combine.rs +++ b/tests/codegen/instrument-xray/options-combine.rs @@ -1,5 +1,6 @@ // Checks that `-Z instrument-xray` options can be specified multiple times. // +// needs-xray // compile-flags: -Z instrument-xray=skip-exit // compile-flags: -Z instrument-xray=instruction-threshold=123 // compile-flags: -Z instrument-xray=instruction-threshold=456 diff --git a/tests/codegen/instrument-xray/options-override.rs b/tests/codegen/instrument-xray/options-override.rs index 3a7c37f9006be..00f81837902dd 100644 --- a/tests/codegen/instrument-xray/options-override.rs +++ b/tests/codegen/instrument-xray/options-override.rs @@ -1,5 +1,6 @@ // Checks that the last `-Z instrument-xray` option wins. // +// needs-xray // compile-flags: -Z instrument-xray=always // compile-flags: -Z instrument-xray=never diff --git a/tests/ui/instrument-xray/flags-always-never-1.rs b/tests/ui/instrument-xray/flags-always-never-1.rs index 03274dedd0830..4dd43439eb7c2 100644 --- a/tests/ui/instrument-xray/flags-always-never-1.rs +++ b/tests/ui/instrument-xray/flags-always-never-1.rs @@ -1,5 +1,6 @@ // Checks that `-Z instrument-xray` does not allow `always` and `never` simultaneously. // +// needs-xray // compile-flags: -Z instrument-xray=always,never // error-pattern: incorrect value `always,never` for unstable option `instrument-xray` diff --git a/tests/ui/instrument-xray/flags-always-never-2.rs b/tests/ui/instrument-xray/flags-always-never-2.rs index e752890b47ad0..7310aa0a0d288 100644 --- a/tests/ui/instrument-xray/flags-always-never-2.rs +++ b/tests/ui/instrument-xray/flags-always-never-2.rs @@ -1,6 +1,7 @@ // Checks that `-Z instrument-xray` allows `always` and `never` sequentially. // (The last specified setting wins, like `-Z instrument-xray=no` as well.) // +// needs-xray // compile-flags: -Z instrument-xray=always // compile-flags: -Z instrument-xray=never // check-pass diff --git a/tests/ui/instrument-xray/flags-basic.rs b/tests/ui/instrument-xray/flags-basic.rs index 5889a20f670c8..b97f0dd8a072c 100644 --- a/tests/ui/instrument-xray/flags-basic.rs +++ b/tests/ui/instrument-xray/flags-basic.rs @@ -1,5 +1,6 @@ // Verifies basic `-Z instrument-xray` flags. // +// needs-xray // compile-flags: -Z instrument-xray // compile-flags: -Z instrument-xray=skip-exit // compile-flags: -Z instrument-xray=ignore-loops,instruction-threshold=300 diff --git a/tests/ui/instrument-xray/flags-dupe-always.rs b/tests/ui/instrument-xray/flags-dupe-always.rs index 36dda4bbd03f4..407f3e2aa5da8 100644 --- a/tests/ui/instrument-xray/flags-dupe-always.rs +++ b/tests/ui/instrument-xray/flags-dupe-always.rs @@ -1,5 +1,6 @@ // Checks that `-Z instrument-xray` does not allow duplicates. // +// needs-xray // compile-flags: -Z instrument-xray=always,always // error-pattern: incorrect value `always,always` for unstable option `instrument-xray` diff --git a/tests/ui/instrument-xray/flags-dupe-ignore-loops.rs b/tests/ui/instrument-xray/flags-dupe-ignore-loops.rs index 227f8557f42ad..75b210a6547ec 100644 --- a/tests/ui/instrument-xray/flags-dupe-ignore-loops.rs +++ b/tests/ui/instrument-xray/flags-dupe-ignore-loops.rs @@ -1,5 +1,6 @@ // Checks that `-Z instrument-xray` does not allow duplicates. // +// needs-xray // compile-flags: -Z instrument-xray=ignore-loops,ignore-loops // error-pattern: incorrect value `ignore-loops,ignore-loops` for unstable option `instrument-xray`