Skip to content

Commit

Permalink
Rollup merge of #111292 - Urgau:check-cfg-issue-111291, r=petrochenkov
Browse files Browse the repository at this point in the history
Fix mishandled `--check-cfg` arguments order

This PR fixes a bug in `--check-cfg` where the order of `--check-cfg=names(a)` and `--check-cfg=values(a,…)` would trip the compiler.

Fixes #111291
cc `@taiki-e` `@petrochenkov`
  • Loading branch information
matthiaskrgr authored May 11, 2023
2 parents 40d933a + f4ca42f commit aa9adf4
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 1 deletion.
11 changes: 10 additions & 1 deletion compiler/rustc_interface/src/interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,12 +173,21 @@ pub fn parse_check_cfg(specs: Vec<String>) -> CheckCfg {
let expected_values = check_cfg
.expecteds
.entry(ident.name.to_string())
.and_modify(|expected_values| match expected_values {
ExpectedValues::Some(_) => {}
ExpectedValues::Any => {
// handle the case where names(...) was done
// before values by changing to a list
*expected_values =
ExpectedValues::Some(FxHashSet::default());
}
})
.or_insert_with(|| {
ExpectedValues::Some(FxHashSet::default())
});

let ExpectedValues::Some(expected_values) = expected_values else {
bug!("shoudn't be possible")
bug!("`expected_values` should be a list a values")
};

for val in values {
Expand Down
19 changes: 19 additions & 0 deletions tests/ui/check-cfg/order-independant.names_after.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
warning: unexpected `cfg` condition value
--> $DIR/order-independant.rs:8:7
|
LL | #[cfg(a)]
| ^- help: specify a config value: `= "b"`
|
= note: expected values for `a` are: `b`
= note: `#[warn(unexpected_cfgs)]` on by default

warning: unexpected `cfg` condition value
--> $DIR/order-independant.rs:12:7
|
LL | #[cfg(a = "unk")]
| ^^^^^^^^^
|
= note: expected values for `a` are: `b`

warning: 2 warnings emitted

19 changes: 19 additions & 0 deletions tests/ui/check-cfg/order-independant.names_before.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
warning: unexpected `cfg` condition value
--> $DIR/order-independant.rs:8:7
|
LL | #[cfg(a)]
| ^- help: specify a config value: `= "b"`
|
= note: expected values for `a` are: `b`
= note: `#[warn(unexpected_cfgs)]` on by default

warning: unexpected `cfg` condition value
--> $DIR/order-independant.rs:12:7
|
LL | #[cfg(a = "unk")]
| ^^^^^^^^^
|
= note: expected values for `a` are: `b`

warning: 2 warnings emitted

16 changes: 16 additions & 0 deletions tests/ui/check-cfg/order-independant.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// check-pass
// revisions: names_before names_after
// compile-flags: -Z unstable-options
// compile-flags: --check-cfg=names(names_before,names_after)
// [names_before]compile-flags: --check-cfg=names(a) --check-cfg=values(a,"b")
// [names_after]compile-flags: --check-cfg=values(a,"b") --check-cfg=names(a)

#[cfg(a)]
//~^ WARNING unexpected `cfg` condition value
fn my_cfg() {}

#[cfg(a = "unk")]
//~^ WARNING unexpected `cfg` condition value
fn my_cfg() {}

fn main() {}

0 comments on commit aa9adf4

Please sign in to comment.