about summary refs log tree commit diff
path: root/compiler/rustc_attr/src
diff options
context:
space:
mode:
authorLoïc BRANSTETT <lolo.branstett@numericable.fr>2022-02-23 15:44:57 +0100
committerLoïc BRANSTETT <lolo.branstett@numericable.fr>2022-02-23 15:44:57 +0100
commitf57cc8ca5cd344a6111650a8ba4744b4e4859da8 (patch)
tree8c5f840d0852e214261c038845612cd0054675e0 /compiler/rustc_attr/src
parentcb4ee81ef555126e49b3e9f16ca6f12a3264a451 (diff)
downloadrust-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.rs12
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!(