mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Rollup merge of #131930 - clubby789:revision-cfg-collide, r=jieyouxu
Don't allow test revisions that conflict with built in cfgs Fixes #128964 Sorry `@heysujal` I started working on this about 1 minute before your comment by complete coincidence 😅
This commit is contained in:
commit
f7f411dd4e
@ -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,
|
||||
|
||||
@ -443,6 +444,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`.
|
||||
@ -654,6 +660,18 @@ 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() })
|
||||
.chain(std::iter::once(String::from("test")))
|
||||
.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));
|
||||
|
@ -362,6 +362,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"),
|
||||
|
||||
|
@ -478,6 +478,9 @@ impl<'test> TestCx<'test> {
|
||||
"error: redundant cfg argument `{normalized_revision}` is already created by the revision"
|
||||
);
|
||||
}
|
||||
if self.config.builtin_cfg_names().contains(&normalized_revision) {
|
||||
panic!("error: revision `{normalized_revision}` collides with a builtin cfg");
|
||||
}
|
||||
cmd.args(cfg_arg);
|
||||
}
|
||||
|
||||
|
@ -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() {}
|
||||
|
Loading…
Reference in New Issue
Block a user