diff options
| author | Loïc BRANSTETT <lolo.branstett@numericable.fr> | 2022-02-23 15:44:57 +0100 |
|---|---|---|
| committer | Loïc BRANSTETT <lolo.branstett@numericable.fr> | 2022-02-23 15:44:57 +0100 |
| commit | f57cc8ca5cd344a6111650a8ba4744b4e4859da8 (patch) | |
| tree | 8c5f840d0852e214261c038845612cd0054675e0 /compiler/rustc_attr/src | |
| parent | cb4ee81ef555126e49b3e9f16ca6f12a3264a451 (diff) | |
| download | rust-f57cc8ca5cd344a6111650a8ba4744b4e4859da8.tar.gz rust-f57cc8ca5cd344a6111650a8ba4744b4e4859da8.zip | |
Always evaluate all cfg predicate in all() and any()
Diffstat (limited to 'compiler/rustc_attr/src')
| -rw-r--r-- | compiler/rustc_attr/src/builtin.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/compiler/rustc_attr/src/builtin.rs b/compiler/rustc_attr/src/builtin.rs index 49043e9f5f9..628da8b6bbb 100644 --- a/compiler/rustc_attr/src/builtin.rs +++ b/compiler/rustc_attr/src/builtin.rs @@ -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!( |
