]> git.lizzy.rs Git - rust.git/blob - tests/ui/stmt_expr_attrs_no_feature.rs
add (currently ICEing) test
[rust.git] / tests / ui / stmt_expr_attrs_no_feature.rs
1 #![feature(rustc_attrs)]
2
3 macro_rules! stmt_mac {
4     () => {
5         fn b() {}
6     }
7 }
8
9 fn main() {
10     #[rustc_dummy]
11     fn a() {}
12
13     // Bug: built-in attrs like `rustc_dummy` are not gated on blocks, but other attrs are.
14     #[rustfmt::skip] //~ ERROR attributes on expressions are experimental
15     {
16
17     }
18
19     #[rustc_dummy]
20     5;
21
22     #[rustc_dummy]
23     stmt_mac!();
24 }
25
26 // Check that cfg works right
27
28 #[cfg(unset)]
29 fn c() {
30     #[rustc_dummy]
31     5;
32 }
33
34 #[cfg(not(unset))]
35 fn j() {
36     #[rustc_dummy]
37     5;
38 }
39
40 #[cfg_attr(not(unset), cfg(unset))]
41 fn d() {
42     #[rustc_dummy]
43     8;
44 }
45
46 #[cfg_attr(not(unset), cfg(not(unset)))]
47 fn i() {
48     #[rustc_dummy]
49     8;
50 }
51
52 // check that macro expansion and cfg works right
53
54 macro_rules! item_mac {
55     ($e:ident) => {
56         fn $e() {
57             #[rustc_dummy]
58             42;
59
60             #[cfg(unset)]
61             fn f() {
62                 #[rustc_dummy]
63                 5;
64             }
65
66             #[cfg(not(unset))]
67             fn k() {
68                 #[rustc_dummy]
69                 5;
70             }
71
72             #[cfg_attr(not(unset), cfg(unset))]
73             fn g() {
74                 #[rustc_dummy]
75                 8;
76             }
77
78             #[cfg_attr(not(unset), cfg(not(unset)))]
79             fn h() {
80                 #[rustc_dummy]
81                 8;
82             }
83
84         }
85     }
86 }
87
88 item_mac!(e);
89
90 // check that the gate visitor works right:
91
92 extern "C" {
93     #[cfg(unset)]
94     fn x(a: [u8; #[rustc_dummy] 5]);
95     fn y(a: [u8; #[rustc_dummy] 5]); //~ ERROR attributes on expressions are experimental
96 }
97
98 struct Foo;
99 impl Foo {
100     #[cfg(unset)]
101     const X: u8 = #[rustc_dummy] 5;
102     const Y: u8 = #[rustc_dummy] 5; //~ ERROR attributes on expressions are experimental
103 }
104
105 trait Bar {
106     #[cfg(unset)]
107     const X: [u8; #[rustc_dummy] 5];
108     const Y: [u8; #[rustc_dummy] 5]; //~ ERROR attributes on expressions are experimental
109 }
110
111 struct Joyce {
112     #[cfg(unset)]
113     field: [u8; #[rustc_dummy] 5],
114     field2: [u8; #[rustc_dummy] 5] //~ ERROR attributes on expressions are experimental
115 }
116
117 struct Walky(
118     #[cfg(unset)] [u8; #[rustc_dummy] 5],
119     [u8; #[rustc_dummy] 5] //~ ERROR attributes on expressions are experimental
120 );
121
122 enum Mike {
123     Happy(
124         #[cfg(unset)] [u8; #[rustc_dummy] 5],
125         [u8; #[rustc_dummy] 5] //~ ERROR attributes on expressions are experimental
126     ),
127     Angry {
128         #[cfg(unset)]
129         field: [u8; #[rustc_dummy] 5],
130         field2: [u8; #[rustc_dummy] 5] //~ ERROR attributes on expressions are experimental
131     }
132 }
133
134 fn pat() {
135     match 5 {
136         #[cfg(unset)]
137         5 => #[rustc_dummy] (),
138         6 => #[rustc_dummy] (), //~ ERROR attributes on expressions are experimental
139         _ => (),
140     }
141 }