about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/parse/macros/cfg_if.rs5
-rw-r--r--tests/rustfmt/main.rs2
-rw-r--r--tests/target/issue_5729.rs5
3 files changed, 11 insertions, 1 deletions
diff --git a/src/parse/macros/cfg_if.rs b/src/parse/macros/cfg_if.rs
index ac03409a784..cbc4c90b8f9 100644
--- a/src/parse/macros/cfg_if.rs
+++ b/src/parse/macros/cfg_if.rs
@@ -34,6 +34,11 @@ fn parse_cfg_if_inner<'a>(
             if !parser.eat_keyword(kw::If) {
                 return Err("Expected `if`");
             }
+
+            if !matches!(parser.token.kind, TokenKind::Pound) {
+                return Err("Failed to parse attributes");
+            }
+
             // Inner attributes are not actually syntactically permitted here, but we don't
             // care about inner vs outer attributes in this position. Our purpose with this
             // special case parsing of cfg_if macros is to ensure we can correctly resolve
diff --git a/tests/rustfmt/main.rs b/tests/rustfmt/main.rs
index f00b0e09604..4936a717463 100644
--- a/tests/rustfmt/main.rs
+++ b/tests/rustfmt/main.rs
@@ -178,7 +178,7 @@ fn rustfmt_emits_error_on_line_overflow_true() {
 #[test]
 #[allow(non_snake_case)]
 fn dont_emit_ICE() {
-    let files = ["tests/target/issue_5728.rs"];
+    let files = ["tests/target/issue_5728.rs", "tests/target/issue_5729.rs"];
 
     for file in files {
         let args = [file];
diff --git a/tests/target/issue_5729.rs b/tests/target/issue_5729.rs
new file mode 100644
index 00000000000..d63c83e88f8
--- /dev/null
+++ b/tests/target/issue_5729.rs
@@ -0,0 +1,5 @@
+cfg_if::cfg_if! {
+    if {
+    } else if #(&cpus) {
+    } else [libc::CTL_HW, libc::HW_NCPU, 0, 0]
+}