Skip to content

Commit d3277b9

Browse files
committed
compiletest: Support ignoring tests requiring missing LLVM components
1 parent e8876ae commit d3277b9

15 files changed

+45
-17
lines changed

src/bootstrap/test.rs

+15-15
Original file line numberDiff line numberDiff line change
@@ -1158,13 +1158,19 @@ impl Step for Compiletest {
11581158
cmd.arg("--quiet");
11591159
}
11601160

1161+
let mut llvm_components_passed = false;
1162+
let mut copts_passed = false;
11611163
if builder.config.llvm_enabled() {
11621164
let llvm_config = builder.ensure(native::Llvm { target: builder.config.build });
11631165
if !builder.config.dry_run {
11641166
let llvm_version = output(Command::new(&llvm_config).arg("--version"));
1167+
let llvm_components = output(Command::new(&llvm_config).arg("--components"));
11651168
// Remove trailing newline from llvm-config output.
1166-
let llvm_version = llvm_version.trim_end();
1167-
cmd.arg("--llvm-version").arg(llvm_version);
1169+
cmd.arg("--llvm-version")
1170+
.arg(llvm_version.trim())
1171+
.arg("--llvm-components")
1172+
.arg(llvm_components.trim());
1173+
llvm_components_passed = true;
11681174
}
11691175
if !builder.is_rust_llvm(target) {
11701176
cmd.arg("--system-llvm");
@@ -1182,15 +1188,13 @@ impl Step for Compiletest {
11821188
// Only pass correct values for these flags for the `run-make` suite as it
11831189
// requires that a C++ compiler was configured which isn't always the case.
11841190
if !builder.config.dry_run && suite == "run-make-fulldeps" {
1185-
let llvm_components = output(Command::new(&llvm_config).arg("--components"));
11861191
cmd.arg("--cc")
11871192
.arg(builder.cc(target))
11881193
.arg("--cxx")
11891194
.arg(builder.cxx(target).unwrap())
11901195
.arg("--cflags")
1191-
.arg(builder.cflags(target, GitRepo::Rustc).join(" "))
1192-
.arg("--llvm-components")
1193-
.arg(llvm_components.trim());
1196+
.arg(builder.cflags(target, GitRepo::Rustc).join(" "));
1197+
copts_passed = true;
11941198
if let Some(ar) = builder.ar(target) {
11951199
cmd.arg("--ar").arg(ar);
11961200
}
@@ -1220,15 +1224,11 @@ impl Step for Compiletest {
12201224
}
12211225
}
12221226

1223-
if suite != "run-make-fulldeps" {
1224-
cmd.arg("--cc")
1225-
.arg("")
1226-
.arg("--cxx")
1227-
.arg("")
1228-
.arg("--cflags")
1229-
.arg("")
1230-
.arg("--llvm-components")
1231-
.arg("");
1227+
if !llvm_components_passed {
1228+
cmd.arg("--llvm-components").arg("");
1229+
}
1230+
if !copts_passed {
1231+
cmd.arg("--cc").arg("").arg("--cxx").arg("").arg("--cflags").arg("");
12321232
}
12331233

12341234
if builder.remote_tested(target) {

src/test/assembly/asm/aarch64-modifiers.rs

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// assembly-output: emit-asm
33
// compile-flags: -O
44
// compile-flags: --target aarch64-unknown-linux-gnu
5+
// needs-llvm-components: aarch64
56

67
#![feature(no_core, lang_items, rustc_attrs)]
78
#![crate_type = "rlib"]

src/test/assembly/asm/aarch64-types.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// no-system-llvm
22
// assembly-output: emit-asm
33
// compile-flags: --target aarch64-unknown-linux-gnu
4+
// needs-llvm-components: aarch64
45

56
#![feature(no_core, lang_items, rustc_attrs, repr_simd)]
67
#![crate_type = "rlib"]

src/test/assembly/asm/arm-modifiers.rs

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// compile-flags: -O
44
// compile-flags: --target armv7-unknown-linux-gnueabihf
55
// compile-flags: -C target-feature=+neon
6+
// needs-llvm-components: arm
67

78
#![feature(no_core, lang_items, rustc_attrs, repr_simd)]
89
#![crate_type = "rlib"]

src/test/assembly/asm/arm-types.rs

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// assembly-output: emit-asm
33
// compile-flags: --target armv7-unknown-linux-gnueabihf
44
// compile-flags: -C target-feature=+neon
5+
// needs-llvm-components: arm
56

67
#![feature(no_core, lang_items, rustc_attrs, repr_simd)]
78
#![crate_type = "rlib"]

src/test/assembly/asm/hexagon-types.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// no-system-llvm
22
// assembly-output: emit-asm
33
// compile-flags: --target hexagon-unknown-linux-musl
4+
// needs-llvm-components: hexagon
45

56
#![feature(no_core, lang_items, rustc_attrs, repr_simd)]
67
#![crate_type = "rlib"]

src/test/assembly/asm/nvptx-types.rs

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// assembly-output: emit-asm
33
// compile-flags: --target nvptx64-nvidia-cuda
44
// compile-flags: --crate-type cdylib
5+
// needs-llvm-components: nvptx
56

67
#![feature(no_core, lang_items, rustc_attrs)]
78
#![no_core]

src/test/assembly/asm/riscv-modifiers.rs

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// compile-flags: -O
44
// compile-flags: --target riscv64gc-unknown-linux-gnu
55
// compile-flags: -C target-feature=+f
6+
// needs-llvm-components: riscv
67

78
#![feature(no_core, lang_items, rustc_attrs)]
89
#![crate_type = "rlib"]

src/test/assembly/asm/riscv-types.rs

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//[riscv64] compile-flags: --target riscv64imac-unknown-none-elf
55
//[riscv32] compile-flags: --target riscv32imac-unknown-none-elf
66
// compile-flags: -C target-feature=+d
7+
// needs-llvm-components: riscv
78

89
#![feature(no_core, lang_items, rustc_attrs)]
910
#![crate_type = "rlib"]

src/test/codegen/abi-efiapi.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
// Checks if the correct annotation for the efiapi ABI is passed to llvm.
22

3-
// revisions:x86_64 i686 arm
4-
3+
// revisions:x86_64 i686 aarch64 arm riscv
54
// min-llvm-version: 9.0
5+
// needs-llvm-components: aarch64 arm riscv
66

77
//[x86_64] compile-flags: --target x86_64-unknown-uefi
88
//[i686] compile-flags: --target i686-unknown-linux-musl
9+
//[aarch64] compile-flags: --target aarch64-unknown-none
910
//[arm] compile-flags: --target armv7r-none-eabi
11+
//[riscv] compile-flags: --target riscv64gc-unknown-none-elf
1012
// compile-flags: -C no-prepopulate-passes
1113

1214
#![crate_type = "lib"]
@@ -22,6 +24,8 @@ trait Copy { }
2224

2325
//x86_64: define win64cc void @has_efiapi
2426
//i686: define void @has_efiapi
27+
//aarch64: define void @has_efiapi
2528
//arm: define void @has_efiapi
29+
//riscv: define void @has_efiapi
2630
#[no_mangle]
2731
pub extern "efiapi" fn has_efiapi() {}

src/test/codegen/avr/avr-func-addrspace.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// compile-flags: -O --target=avr-unknown-unknown --crate-type=rlib
2+
// needs-llvm-components: avr
23

34
// This test validates that function pointers can be stored in global variables
45
// and called upon. It ensures that Rust emits function pointers in the correct

src/test/ui/issues/issue-37131.rs

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
// compile-flags: --target=thumbv6m-none-eabi
55
// ignore-arm
6+
// needs-llvm-components: arm
67

78
// error-pattern:target may not be installed
89
fn main() { }

src/test/ui/issues/issue-49851/compiler-builtins-error.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//~ ERROR 1:1: 1:1: can't find crate for `core` [E0463]
22

33
// compile-flags: --target thumbv7em-none-eabihf
4+
// needs-llvm-components: arm
45
#![deny(unsafe_code)]
56
#![deny(warnings)]
67
#![no_std]

src/test/ui/issues/issue-50993.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// compile-flags: --crate-type dylib --target thumbv7em-none-eabihf
2+
// needs-llvm-components: arm
23
// build-pass
34
// error-pattern: dropping unsupported crate type `dylib` for target `thumbv7em-none-eabihf`
45

src/tools/compiletest/src/header.rs

+12
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::collections::HashSet;
12
use std::env;
23
use std::fs::File;
34
use std::io::prelude::*;
@@ -186,6 +187,17 @@ impl EarlyProps {
186187
if config.system_llvm && line.starts_with("no-system-llvm") {
187188
return true;
188189
}
190+
if let Some(needed_components) =
191+
config.parse_name_value_directive(line, "needs-llvm-components")
192+
{
193+
let components: HashSet<_> = config.llvm_components.split_whitespace().collect();
194+
if !needed_components
195+
.split_whitespace()
196+
.all(|needed_component| components.contains(needed_component))
197+
{
198+
return true;
199+
}
200+
}
189201
if let Some(actual_version) = config.llvm_version {
190202
if let Some(rest) = line.strip_prefix("min-llvm-version:").map(str::trim) {
191203
let min_version = extract_llvm_version(rest).unwrap();

0 commit comments

Comments
 (0)