Skip to content

Commit db6da12

Browse files
committed
tests: Add regression test for derive token invalidation (rust-lang#81099)
1 parent bb029a1 commit db6da12

File tree

2 files changed

+172
-0
lines changed

2 files changed

+172
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// A regression test for issue #81099.
2+
3+
//@ check-pass
4+
//@ proc-macro:test-macros.rs
5+
6+
#![feature(stmt_expr_attributes)]
7+
#![feature(proc_macro_hygiene)]
8+
9+
#[macro_use]
10+
extern crate test_macros;
11+
12+
#[derive(Clone, Copy)]
13+
struct S {
14+
// `print_args` runs twice
15+
// - on eagerly configured `S` (from `impl Copy`), only 11 should be printed
16+
// - on non-configured `S` (from `struct S`), both 10 and 11 should be printed
17+
field: [u8; #[print_attr] {
18+
#[cfg(FALSE)] { 10 }
19+
#[cfg(not(FALSE))] { 11 }
20+
}],
21+
}
22+
23+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
PRINT-ATTR INPUT (DISPLAY): { #[cfg(not(FALSE))] { 11 } }
2+
PRINT-ATTR INPUT (DEBUG): TokenStream [
3+
Group {
4+
delimiter: Brace,
5+
stream: TokenStream [
6+
Punct {
7+
ch: '#',
8+
spacing: Alone,
9+
span: #0 bytes(491..492),
10+
},
11+
Group {
12+
delimiter: Bracket,
13+
stream: TokenStream [
14+
Ident {
15+
ident: "cfg",
16+
span: #0 bytes(493..496),
17+
},
18+
Group {
19+
delimiter: Parenthesis,
20+
stream: TokenStream [
21+
Ident {
22+
ident: "not",
23+
span: #0 bytes(497..500),
24+
},
25+
Group {
26+
delimiter: Parenthesis,
27+
stream: TokenStream [
28+
Ident {
29+
ident: "FALSE",
30+
span: #0 bytes(501..506),
31+
},
32+
],
33+
span: #0 bytes(500..507),
34+
},
35+
],
36+
span: #0 bytes(496..508),
37+
},
38+
],
39+
span: #0 bytes(492..509),
40+
},
41+
Group {
42+
delimiter: Brace,
43+
stream: TokenStream [
44+
Literal {
45+
kind: Integer,
46+
symbol: "11",
47+
suffix: None,
48+
span: #0 bytes(513..515),
49+
},
50+
],
51+
span: #0 bytes(511..517),
52+
},
53+
],
54+
span: #0 bytes(452..523),
55+
},
56+
]
57+
PRINT-ATTR INPUT (DISPLAY): { #[cfg(FALSE)] { 10 } #[cfg(not(FALSE))] { 11 } }
58+
PRINT-ATTR INPUT (DEBUG): TokenStream [
59+
Group {
60+
delimiter: Brace,
61+
stream: TokenStream [
62+
Punct {
63+
ch: '#',
64+
spacing: Alone,
65+
span: #0 bytes(462..463),
66+
},
67+
Group {
68+
delimiter: Bracket,
69+
stream: TokenStream [
70+
Ident {
71+
ident: "cfg",
72+
span: #0 bytes(464..467),
73+
},
74+
Group {
75+
delimiter: Parenthesis,
76+
stream: TokenStream [
77+
Ident {
78+
ident: "FALSE",
79+
span: #0 bytes(468..473),
80+
},
81+
],
82+
span: #0 bytes(467..474),
83+
},
84+
],
85+
span: #0 bytes(463..475),
86+
},
87+
Group {
88+
delimiter: Brace,
89+
stream: TokenStream [
90+
Literal {
91+
kind: Integer,
92+
symbol: "10",
93+
suffix: None,
94+
span: #0 bytes(478..480),
95+
},
96+
],
97+
span: #0 bytes(476..482),
98+
},
99+
Punct {
100+
ch: '#',
101+
spacing: Alone,
102+
span: #0 bytes(491..492),
103+
},
104+
Group {
105+
delimiter: Bracket,
106+
stream: TokenStream [
107+
Ident {
108+
ident: "cfg",
109+
span: #0 bytes(493..496),
110+
},
111+
Group {
112+
delimiter: Parenthesis,
113+
stream: TokenStream [
114+
Ident {
115+
ident: "not",
116+
span: #0 bytes(497..500),
117+
},
118+
Group {
119+
delimiter: Parenthesis,
120+
stream: TokenStream [
121+
Ident {
122+
ident: "FALSE",
123+
span: #0 bytes(501..506),
124+
},
125+
],
126+
span: #0 bytes(500..507),
127+
},
128+
],
129+
span: #0 bytes(496..508),
130+
},
131+
],
132+
span: #0 bytes(492..509),
133+
},
134+
Group {
135+
delimiter: Brace,
136+
stream: TokenStream [
137+
Literal {
138+
kind: Integer,
139+
symbol: "11",
140+
suffix: None,
141+
span: #0 bytes(513..515),
142+
},
143+
],
144+
span: #0 bytes(511..517),
145+
},
146+
],
147+
span: #0 bytes(452..523),
148+
},
149+
]

0 commit comments

Comments
 (0)