Always evaluate all cfg predicate in all() and any()
This commit is contained in:
parent
cb4ee81ef5
commit
f57cc8ca5c
|
@ -594,10 +594,18 @@ pub fn eval_condition(
|
|||
match cfg.name_or_empty() {
|
||||
sym::any => mis
|
||||
.iter()
|
||||
.any(|mi| eval_condition(mi.meta_item().unwrap(), sess, features, eval)),
|
||||
// We don't use any() here, because we want to evaluate all cfg condition
|
||||
// as eval_condition can (and does) extra checks
|
||||
.fold(false, |res, mi| {
|
||||
res | eval_condition(mi.meta_item().unwrap(), sess, features, eval)
|
||||
}),
|
||||
sym::all => mis
|
||||
.iter()
|
||||
.all(|mi| eval_condition(mi.meta_item().unwrap(), sess, features, eval)),
|
||||
// We don't use all() here, because we want to evaluate all cfg condition
|
||||
// as eval_condition can (and does) extra checks
|
||||
.fold(true, |res, mi| {
|
||||
res & eval_condition(mi.meta_item().unwrap(), sess, features, eval)
|
||||
}),
|
||||
sym::not => {
|
||||
if mis.len() != 1 {
|
||||
struct_span_err!(
|
||||
|
|
19
src/test/ui/cfg/cfg-path-error.rs
Normal file
19
src/test/ui/cfg/cfg-path-error.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
// check-fail
|
||||
|
||||
#[cfg(any(foo, foo::bar))]
|
||||
//~^ERROR `cfg` predicate key must be an identifier
|
||||
fn foo1() {}
|
||||
|
||||
#[cfg(any(foo::bar, foo))]
|
||||
//~^ERROR `cfg` predicate key must be an identifier
|
||||
fn foo2() {}
|
||||
|
||||
#[cfg(all(foo, foo::bar))]
|
||||
//~^ERROR `cfg` predicate key must be an identifier
|
||||
fn foo3() {}
|
||||
|
||||
#[cfg(all(foo::bar, foo))]
|
||||
//~^ERROR `cfg` predicate key must be an identifier
|
||||
fn foo4() {}
|
||||
|
||||
fn main() {}
|
26
src/test/ui/cfg/cfg-path-error.stderr
Normal file
26
src/test/ui/cfg/cfg-path-error.stderr
Normal file
|
@ -0,0 +1,26 @@
|
|||
error: `cfg` predicate key must be an identifier
|
||||
--> $DIR/cfg-path-error.rs:3:16
|
||||
|
|
||||
LL | #[cfg(any(foo, foo::bar))]
|
||||
| ^^^^^^^^
|
||||
|
||||
error: `cfg` predicate key must be an identifier
|
||||
--> $DIR/cfg-path-error.rs:7:11
|
||||
|
|
||||
LL | #[cfg(any(foo::bar, foo))]
|
||||
| ^^^^^^^^
|
||||
|
||||
error: `cfg` predicate key must be an identifier
|
||||
--> $DIR/cfg-path-error.rs:11:16
|
||||
|
|
||||
LL | #[cfg(all(foo, foo::bar))]
|
||||
| ^^^^^^^^
|
||||
|
||||
error: `cfg` predicate key must be an identifier
|
||||
--> $DIR/cfg-path-error.rs:15:11
|
||||
|
|
||||
LL | #[cfg(all(foo::bar, foo))]
|
||||
| ^^^^^^^^
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
Loading…
Reference in a new issue