Skip to content

Commit

Permalink
Don't allow test revisions that conflict with built in cfgs
Browse files Browse the repository at this point in the history
  • Loading branch information
clubby789 committed Oct 19, 2024
1 parent b27f33a commit 3b99cbe
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 2 deletions.
17 changes: 17 additions & 0 deletions src/tools/compiletest/src/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,7 @@ pub struct Config {
pub only_modified: bool,

pub target_cfgs: OnceLock<TargetCfgs>,
pub builtin_cfg_names: OnceLock<HashSet<String>>,

pub nocapture: bool,

Expand Down Expand Up @@ -440,6 +441,11 @@ impl Config {
self.target_cfg().panic == PanicStrategy::Unwind
}

/// Get the list of builtin, 'well known' cfg names
pub fn builtin_cfg_names(&self) -> &HashSet<String> {
self.builtin_cfg_names.get_or_init(|| builtin_cfg_names(self))
}

pub fn has_threads(&self) -> bool {
// Wasm targets don't have threads unless `-threads` is in the target
// name, such as `wasm32-wasip1-threads`.
Expand Down Expand Up @@ -651,6 +657,17 @@ pub enum Endian {
Big,
}

fn builtin_cfg_names(config: &Config) -> HashSet<String> {
rustc_output(
config,
&["--print=check-cfg", "-Zunstable-options", "--check-cfg=cfg()"],
Default::default(),
)
.lines()
.map(|l| if let Some((name, _)) = l.split_once('=') { name.to_string() } else { l.to_string() })
.collect()
}

fn rustc_output(config: &Config, args: &[&str], envs: HashMap<String, String>) -> String {
let mut command = Command::new(&config.rustc_path);
add_dylib_path(&mut command, iter::once(&config.compile_lib_path));
Expand Down
1 change: 1 addition & 0 deletions src/tools/compiletest/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,7 @@ pub fn parse_config(args: Vec<String>) -> Config {
force_rerun: matches.opt_present("force-rerun"),

target_cfgs: OnceLock::new(),
builtin_cfg_names: OnceLock::new(),

nocapture: matches.opt_present("nocapture"),

Expand Down
3 changes: 3 additions & 0 deletions src/tools/compiletest/src/runtest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,9 @@ impl<'test> TestCx<'test> {

if let Some(revision) = self.revision {
let normalized_revision = normalize_revision(revision);
if self.config.builtin_cfg_names().contains(&normalized_revision) {
panic!("error: revision `{normalized_revision}` collides with a builtin cfg");
}
cmd.args(&["--cfg", &normalized_revision]);
}

Expand Down
4 changes: 2 additions & 2 deletions tests/ui/lint/lint-missing-doc-expect.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// Make sure that `#[expect(missing_docs)]` is always correctly fulfilled.

//@ check-pass
//@ revisions: lib bin test
//@ revisions: lib bin test_
//@ [lib]compile-flags: --crate-type lib
//@ [bin]compile-flags: --crate-type bin
//@ [test]compile-flags: --test
//@ [test_]compile-flags: --test

#[expect(missing_docs)]
pub fn foo() {}
Expand Down

0 comments on commit 3b99cbe

Please sign in to comment.