Skip to content

Commit 2d3ee01

Browse files
Split compiletest --codegen-backend into two options --default-codegen-backend and --override-codegen-backend
1 parent dc81d75 commit 2d3ee01

File tree

5 files changed

+33
-17
lines changed

5 files changed

+33
-17
lines changed

src/bootstrap/src/core/build_steps/test.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1849,14 +1849,17 @@ HELP: You can add it into `bootstrap.toml` in `rust.codegen-backends = [{name:?}
18491849
);
18501850
crate::exit!(1);
18511851
}
1852+
// Tells compiletest that we want to use this codegen in particular and to override
1853+
// the default one.
1854+
cmd.arg("--override-codegen-backend").arg(codegen_backend.name());
18521855
// Tells compiletest which codegen backend to use.
18531856
// It is used to e.g. ignore tests that don't support that codegen backend.
1854-
cmd.arg("--codegen-backend").arg(codegen_backend.name());
1855-
} else if let Some(codegen_backend) = builder.config.default_codegen_backend(compiler.host)
1856-
{
1857+
cmd.arg("--default-codegen-backend").arg(codegen_backend.name());
1858+
} else {
18571859
// Tells compiletest which codegen backend to use.
18581860
// It is used to e.g. ignore tests that don't support that codegen backend.
1859-
cmd.arg("--codegen-backend").arg(codegen_backend.name());
1861+
cmd.arg("--default-codegen-backend")
1862+
.arg(builder.config.default_codegen_backend(compiler.host).unwrap().name());
18601863
}
18611864

18621865
if builder.build.config.llvm_enzyme {

src/tools/compiletest/src/common.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,9 @@ pub struct Config {
692692
pub minicore_path: Utf8PathBuf,
693693

694694
/// Current codegen backend used.
695-
pub codegen_backend: CodegenBackend,
695+
pub default_codegen_backend: CodegenBackend,
696+
/// Name/path of the backend to use instead of `default_codegen_backend`.
697+
pub override_codegen_backend: Option<String>,
696698
}
697699

698700
impl Config {
@@ -796,7 +798,8 @@ impl Config {
796798
profiler_runtime: Default::default(),
797799
diff_command: Default::default(),
798800
minicore_path: Default::default(),
799-
codegen_backend: CodegenBackend::Llvm,
801+
default_codegen_backend: CodegenBackend::Llvm,
802+
override_codegen_backend: None,
800803
}
801804
}
802805

src/tools/compiletest/src/directives.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1624,7 +1624,7 @@ fn ignore_backends(
16241624
}
16251625
}
16261626
}) {
1627-
if config.codegen_backend == backend {
1627+
if config.default_codegen_backend == backend {
16281628
return IgnoreDecision::Ignore {
16291629
reason: format!("{} backend is marked as ignore", backend.as_str()),
16301630
};
@@ -1651,12 +1651,12 @@ fn needs_backends(
16511651
panic!("Invalid needs-backends value `{backend}` in `{path}`: {error}")
16521652
}
16531653
})
1654-
.any(|backend| config.codegen_backend == backend)
1654+
.any(|backend| config.default_codegen_backend == backend)
16551655
{
16561656
return IgnoreDecision::Ignore {
16571657
reason: format!(
16581658
"{} backend is not part of required backends",
1659-
config.codegen_backend.as_str()
1659+
config.default_codegen_backend.as_str()
16601660
),
16611661
};
16621662
}

src/tools/compiletest/src/lib.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,15 @@ pub fn parse_config(args: Vec<String>) -> Config {
212212
)
213213
.optopt(
214214
"",
215-
"codegen-backend",
215+
"default-codegen-backend",
216216
"the codegen backend currently used",
217217
"CODEGEN BACKEND NAME",
218+
)
219+
.optopt(
220+
"",
221+
"override-codegen-backend",
222+
"the codegen backend to use instead of the default one",
223+
"CODEGEN BACKEND [NAME | PATH]",
218224
);
219225

220226
let (argv0, args_) = args.split_first().unwrap();
@@ -276,14 +282,17 @@ pub fn parse_config(args: Vec<String>) -> Config {
276282
|| directives::extract_llvm_version_from_binary(&matches.opt_str("llvm-filecheck")?),
277283
);
278284

279-
let codegen_backend = match matches.opt_str("codegen-backend").as_deref() {
285+
let default_codegen_backend = match matches.opt_str("default-codegen-backend").as_deref() {
280286
Some(backend) => match CodegenBackend::try_from(backend) {
281287
Ok(backend) => backend,
282-
Err(error) => panic!("invalid value `{backend}` for `--codegen-backend`: {error}"),
288+
Err(error) => {
289+
panic!("invalid value `{backend}` for `--defalt-codegen-backend`: {error}")
290+
}
283291
},
284292
// By default, it's always llvm.
285293
None => CodegenBackend::Llvm,
286294
};
295+
let override_codegen_backend = matches.opt_str("override-codegen-backend");
287296

288297
let run_ignored = matches.opt_present("ignored");
289298
let with_rustc_debug_assertions = matches.opt_present("with-rustc-debug-assertions");
@@ -472,7 +481,8 @@ pub fn parse_config(args: Vec<String>) -> Config {
472481

473482
minicore_path: opt_path(matches, "minicore-path"),
474483

475-
codegen_backend,
484+
default_codegen_backend,
485+
override_codegen_backend,
476486
}
477487
}
478488

@@ -812,13 +822,13 @@ fn collect_tests_from_dir(
812822
&& let Some(Utf8Component::Normal(parent)) = components.next()
813823
&& parent == "tests"
814824
&& let Ok(backend) = CodegenBackend::try_from(backend)
815-
&& backend != cx.config.codegen_backend
825+
&& backend != cx.config.default_codegen_backend
816826
{
817827
// We ignore asm tests which don't match the current codegen backend.
818828
warning!(
819829
"Ignoring tests in `{dir}` because they don't match the configured codegen \
820830
backend (`{}`)",
821-
cx.config.codegen_backend.as_str(),
831+
cx.config.default_codegen_backend.as_str(),
822832
);
823833
return Ok(TestCollector::new());
824834
}

src/tools/compiletest/src/runtest.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,8 +1559,8 @@ impl<'test> TestCx<'test> {
15591559
}
15601560

15611561
// If the provided codegen backend is not LLVM, we need to pass it.
1562-
if !matches!(self.config.codegen_backend, crate::CodegenBackend::Llvm) {
1563-
rustc.arg(format!("-Zcodegen-backend={}", self.config.codegen_backend.as_str()));
1562+
if let Some(ref backend) = self.config.override_codegen_backend {
1563+
rustc.arg(format!("-Zcodegen-backend={}", backend));
15641564
}
15651565

15661566
// Optionally prevent default --target if specified in test compile-flags.

0 commit comments

Comments
 (0)