| // 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(true)] //~ error: expected `,`, found end of `cfg_attr` | |
| struct A0C0; | |
| // Zero attributes, one trailing comma | |
| #[cfg_attr(true,)] | |
| //~^ WARN `#[cfg_attr]` does not expand to any attributes | |
| struct A0C1; | |
| // Zero attributes, two trailing commas | |
| #[cfg_attr(true,,)] //~ ERROR expected identifier | |
| struct A0C2; | |
| // One attribute, no trailing comma | |
| #[cfg_attr(true, must_use)] // Ok | |
| struct A1C0; | |
| // One attribute, one trailing comma | |
| #[cfg_attr(true, must_use,)] // Ok | |
| struct A1C1; | |
| // One attribute, two trailing commas | |
| #[cfg_attr(true, must_use,,)] //~ ERROR expected identifier | |
| struct A1C2; | |
| // Two attributes, no trailing comma | |
| #[cfg_attr(true, must_use, deprecated)] // Ok | |
| struct A2C0; | |
| // Two attributes, one trailing comma | |
| #[cfg_attr(true, must_use, deprecated,)] // Ok | |
| struct A2C1; | |
| // Two attributes, two trailing commas | |
| #[cfg_attr(true, must_use, deprecated,,)] //~ ERROR expected identifier | |
| struct A2C2; | |
| // Wrong delimiter `[` | |
| #[cfg_attr[true,,]] | |
| //~^ ERROR wrong `cfg_attr` delimiters | |
| //~| ERROR expected identifier, found `,` | |
| struct BracketZero; | |
| // Wrong delimiter `{` | |
| #[cfg_attr{true,,}] | |
| //~^ ERROR wrong `cfg_attr` delimiters | |
| //~| ERROR expected identifier, found `,` | |
| struct BraceZero; | |
| fn main() {} |