1 /* Test declaration specifiers. Test empty declarations. Test with 2 -pedantic. */ 3 /* Origin: Joseph Myers <jsm@polyomino.org.uk> */ 4 /* { dg-do compile } */ 5 /* { dg-options "-std=gnu89 -pedantic" } */ 6 7 /* If a declaration does not declare a declarator, it must declare a 8 tag or the members of an enumeration, and must only contain one 9 type specifier. */ 10 11 typedef int T; 12 13 struct s0; 14 union u0; 15 enum e0; /* { dg-warning "ISO C forbids forward references" } */ 16 enum { E0 }; 17 enum e1 { E1 }; 18 19 /* Not declaring anything (pedwarns). */ 20 struct { int a; }; /* { dg-warning "unnamed struct/union that defines no instances" } */ 21 int; /* { dg-warning "useless type name in empty declaration" } */ 22 long; /* { dg-warning "useless type name in empty declaration" } */ 23 T; /* { dg-warning "useless type name in empty declaration" } */ 24 static const; /* { dg-warning "useless storage class specifier in empty declaration" } */ 25 /* { dg-warning "empty declaration" "static const" { target *-*-* } .-1 } */ 26 union { long b; }; /* { dg-warning "unnamed struct/union that defines no instances" } */ 27 28 /* Multiple type names (errors). */ 29 struct s1 int; /* { dg-error "two or more data types in declaration specifiers" } */ 30 char union u1; /* { dg-error "two or more data types in declaration specifiers" } */ 31 /* { dg-warning "useless type name in empty declaration" "char union" { target *-*-* } .-1 } */ 32 double enum { E2 }; /* { dg-error "two or more data types in declaration specifiers" } */ 33 /* { dg-warning "useless type name in empty declaration" "double enum" { target *-*-* } .-1 } */ 34 T struct s2; /* { dg-error "two or more data types in declaration specifiers" } */ 35 /* { dg-warning "useless type name in empty declaration" "T struct" { target *-*-* } .-1 } */ 36 long union u2; /* { dg-error "two or more data types in declaration specifiers" } */ 37 /* { dg-warning "useless type name in empty declaration" "empty" { target *-*-* } .-1 } */ 38 struct s3 short; /* { dg-error "two or more data types in declaration specifiers" } */ 39 union u3 signed; /* { dg-error "two or more data types in declaration specifiers" } */ 40 unsigned struct s4; /* { dg-error "two or more data types in declaration specifiers" } */ 41 /* { dg-warning "useless type name in empty declaration" "empty" { target *-*-* } .-1 } */ 42 _Complex enum { E3 }; /* { dg-error "two or more data types in declaration specifiers" } */ 43 /* { dg-warning "useless type name in empty declaration" "empty" { target *-*-* } .-1 } */ 44 /* { dg-warning "ISO C90 does not support complex types" "C90" { target *-*-* } .-2 } */ 45 /* { dg-warning "ISO C does not support plain 'complex' meaning 'double complex'" "ISO C" { target *-*-* } .-3 } */ 46