summary refs log tree commit diff
path: root/tests/ui/proc-macro
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2025-02-24 17:49:20 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2025-02-24 17:49:20 +0300
commitdb6da1268e874dad5d727a916edfd7ebb615129c (patch)
tree1bf461c0abb6e515d2e7a752ae1ff71d90b60c12 /tests/ui/proc-macro
parentbb029a1d3f819471722f32dd9fcfa2c83d4f24f4 (diff)
downloadrust-db6da1268e874dad5d727a916edfd7ebb615129c.tar.gz
rust-db6da1268e874dad5d727a916edfd7ebb615129c.zip
tests: Add regression test for derive token invalidation (#81099)
Diffstat (limited to 'tests/ui/proc-macro')
-rw-r--r--tests/ui/proc-macro/derive-cfg-nested-tokens.rs23
-rw-r--r--tests/ui/proc-macro/derive-cfg-nested-tokens.stdout149
2 files changed, 172 insertions, 0 deletions
diff --git a/tests/ui/proc-macro/derive-cfg-nested-tokens.rs b/tests/ui/proc-macro/derive-cfg-nested-tokens.rs
new file mode 100644
index 00000000000..7d4e8d8373d
--- /dev/null
+++ b/tests/ui/proc-macro/derive-cfg-nested-tokens.rs
@@ -0,0 +1,23 @@
+// A regression test for issue #81099.
+
+//@ check-pass
+//@ proc-macro:test-macros.rs
+
+#![feature(stmt_expr_attributes)]
+#![feature(proc_macro_hygiene)]
+
+#[macro_use]
+extern crate test_macros;
+
+#[derive(Clone, Copy)]
+struct S {
+    // `print_args` runs twice
+    // - on eagerly configured `S` (from `impl Copy`), only 11 should be printed
+    // - on non-configured `S` (from `struct S`), both 10 and 11 should be printed
+    field: [u8; #[print_attr] {
+        #[cfg(FALSE)] { 10 }
+        #[cfg(not(FALSE))]  { 11 }
+    }],
+}
+
+fn main() {}
diff --git a/tests/ui/proc-macro/derive-cfg-nested-tokens.stdout b/tests/ui/proc-macro/derive-cfg-nested-tokens.stdout
new file mode 100644
index 00000000000..05bf21ee8f9
--- /dev/null
+++ b/tests/ui/proc-macro/derive-cfg-nested-tokens.stdout
@@ -0,0 +1,149 @@
+PRINT-ATTR INPUT (DISPLAY): { #[cfg(not(FALSE))] { 11 } }
+PRINT-ATTR INPUT (DEBUG): TokenStream [
+    Group {
+        delimiter: Brace,
+        stream: TokenStream [
+            Punct {
+                ch: '#',
+                spacing: Alone,
+                span: #0 bytes(491..492),
+            },
+            Group {
+                delimiter: Bracket,
+                stream: TokenStream [
+                    Ident {
+                        ident: "cfg",
+                        span: #0 bytes(493..496),
+                    },
+                    Group {
+                        delimiter: Parenthesis,
+                        stream: TokenStream [
+                            Ident {
+                                ident: "not",
+                                span: #0 bytes(497..500),
+                            },
+                            Group {
+                                delimiter: Parenthesis,
+                                stream: TokenStream [
+                                    Ident {
+                                        ident: "FALSE",
+                                        span: #0 bytes(501..506),
+                                    },
+                                ],
+                                span: #0 bytes(500..507),
+                            },
+                        ],
+                        span: #0 bytes(496..508),
+                    },
+                ],
+                span: #0 bytes(492..509),
+            },
+            Group {
+                delimiter: Brace,
+                stream: TokenStream [
+                    Literal {
+                        kind: Integer,
+                        symbol: "11",
+                        suffix: None,
+                        span: #0 bytes(513..515),
+                    },
+                ],
+                span: #0 bytes(511..517),
+            },
+        ],
+        span: #0 bytes(452..523),
+    },
+]
+PRINT-ATTR INPUT (DISPLAY): { #[cfg(FALSE)] { 10 } #[cfg(not(FALSE))] { 11 } }
+PRINT-ATTR INPUT (DEBUG): TokenStream [
+    Group {
+        delimiter: Brace,
+        stream: TokenStream [
+            Punct {
+                ch: '#',
+                spacing: Alone,
+                span: #0 bytes(462..463),
+            },
+            Group {
+                delimiter: Bracket,
+                stream: TokenStream [
+                    Ident {
+                        ident: "cfg",
+                        span: #0 bytes(464..467),
+                    },
+                    Group {
+                        delimiter: Parenthesis,
+                        stream: TokenStream [
+                            Ident {
+                                ident: "FALSE",
+                                span: #0 bytes(468..473),
+                            },
+                        ],
+                        span: #0 bytes(467..474),
+                    },
+                ],
+                span: #0 bytes(463..475),
+            },
+            Group {
+                delimiter: Brace,
+                stream: TokenStream [
+                    Literal {
+                        kind: Integer,
+                        symbol: "10",
+                        suffix: None,
+                        span: #0 bytes(478..480),
+                    },
+                ],
+                span: #0 bytes(476..482),
+            },
+            Punct {
+                ch: '#',
+                spacing: Alone,
+                span: #0 bytes(491..492),
+            },
+            Group {
+                delimiter: Bracket,
+                stream: TokenStream [
+                    Ident {
+                        ident: "cfg",
+                        span: #0 bytes(493..496),
+                    },
+                    Group {
+                        delimiter: Parenthesis,
+                        stream: TokenStream [
+                            Ident {
+                                ident: "not",
+                                span: #0 bytes(497..500),
+                            },
+                            Group {
+                                delimiter: Parenthesis,
+                                stream: TokenStream [
+                                    Ident {
+                                        ident: "FALSE",
+                                        span: #0 bytes(501..506),
+                                    },
+                                ],
+                                span: #0 bytes(500..507),
+                            },
+                        ],
+                        span: #0 bytes(496..508),
+                    },
+                ],
+                span: #0 bytes(492..509),
+            },
+            Group {
+                delimiter: Brace,
+                stream: TokenStream [
+                    Literal {
+                        kind: Integer,
+                        symbol: "11",
+                        suffix: None,
+                        span: #0 bytes(513..515),
+                    },
+                ],
+                span: #0 bytes(511..517),
+            },
+        ],
+        span: #0 bytes(452..523),
+    },
+]