| // Parse `cfg_attr` with varying numbers of attributes and trailing commas |
| |
| // Completely empty `cfg_attr` input |
| #[cfg_attr()] //~ error: malformed `cfg_attr` attribute input |
| struct NoConfigurationPredicate; |
| |
| // Zero attributes, zero trailing comma (comma manatory here) |
| #[cfg_attr(all())] //~ error: expected `,`, found end of `cfg_attr` |
| struct A0C0; |
| |
| // Zero attributes, one trailing comma |
| #[cfg_attr(all(),)] // Ok |
| struct A0C1; |
| |
| // Zero attributes, two trailing commas |
| #[cfg_attr(all(),,)] //~ ERROR expected identifier |
| struct A0C2; |
| |
| // One attribute, no trailing comma |
| #[cfg_attr(all(), must_use)] // Ok |
| struct A1C0; |
| |
| // One attribute, one trailing comma |
| #[cfg_attr(all(), must_use,)] // Ok |
| struct A1C1; |
| |
| // One attribute, two trailing commas |
| #[cfg_attr(all(), must_use,,)] //~ ERROR expected identifier |
| struct A1C2; |
| |
| // Two attributes, no trailing comma |
| #[cfg_attr(all(), must_use, deprecated)] // Ok |
| struct A2C0; |
| |
| // Two attributes, one trailing comma |
| #[cfg_attr(all(), must_use, deprecated,)] // Ok |
| struct A2C1; |
| |
| // Two attributes, two trailing commas |
| #[cfg_attr(all(), must_use, deprecated,,)] //~ ERROR expected identifier |
| struct A2C2; |
| |
| // Wrong delimiter `[` |
| #[cfg_attr[all(),,]] |
| //~^ ERROR wrong `cfg_attr` delimiters |
| //~| ERROR expected identifier, found `,` |
| struct BracketZero; |
| |
| // Wrong delimiter `{` |
| #[cfg_attr{all(),,}] |
| //~^ ERROR wrong `cfg_attr` delimiters |
| //~| ERROR expected identifier, found `,` |
| struct BraceZero; |
| |
| fn main() {} |