(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
declspec-13.c
       1  /* Test declaration specifiers.  Test messages for bad type
       2     specifiers.  */
       3  /* Origin: Joseph Myers <jsm@polyomino.org.uk> */
       4  /* { dg-do compile } */
       5  /* { dg-options "-std=gnu89 -pedantic" } */
       6  
       7  /* typeof should act much like typedef, so the following are
       8     invalid.  */
       9  typeof(double) long x0; /* { dg-error "two or more data types in declaration specifiers" } */
      10  typeof(double) _Complex x1; /* { dg-error "two or more data types in declaration specifiers" } */
      11  
      12  /* The following is erroneous, and used to get a bogus message about
      13     complex integer types.  */
      14  typedef double D;
      15  D _Complex x2; /* { dg-error "two or more data types in declaration specifiers" } */
      16  
      17  /* The following empty declarations should have problems in their type
      18     specifiers diagnosed, not just the general problem that they are
      19     empty declarations.  */
      20  long short; /* { dg-error "both 'long' and 'short' in declaration specifiers" } */
      21  /* { dg-warning "useless type name in empty declaration" "empty" { target *-*-* } .-1 } */
      22  _Complex double; /* { dg-warning "ISO C90 does not support complex types" } */
      23  /* { dg-warning "useless type name in empty declaration" "empty" { target *-*-* } .-1 } */
      24  _Complex; /* { dg-warning "ISO C90 does not support complex types" } */
      25  /* { dg-warning "ISO C does not support plain 'complex' meaning 'double complex'" "ISO C" { target *-*-* } .-1 } */
      26  /* { dg-warning "useless type name in empty declaration" "empty" { target *-*-* } .-2 } */
      27  _Complex int; /* { dg-warning "ISO C90 does not support complex types" } */
      28  /* { dg-warning "ISO C does not support complex integer types" "ISO C" { target *-*-* } .-1 } */
      29  /* { dg-warning "useless type name in empty declaration" "empty" { target *-*-* } .-2 } */
      30  
      31  /* Specific messages for each invalid combination.  (That some message
      32     is given when appropriate for a larger collection of combinations
      33     of type specifiers is tested in *typespec*.c.)  */
      34  
      35  long double long x3; /* { dg-error "both 'long long' and 'double' in declaration specifiers" } */
      36  short long x4; /* { dg-error "both 'long' and 'short' in declaration specifiers" } */
      37  void long x5; /* { dg-error "both 'long' and 'void' in declaration specifiers" } */
      38  _Bool long x6; /* { dg-error "both 'long' and '_Bool' in declaration specifiers" } */
      39  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-1 } */
      40  char long x7; /* { dg-error "both 'long' and 'char' in declaration specifiers" } */
      41  float long x8; /* { dg-error "both 'long' and 'float' in declaration specifiers" } */
      42  long short x9; /* { dg-error "both 'long' and 'short' in declaration specifiers" } */
      43  void short x10; /* { dg-error "both 'short' and 'void' in declaration specifiers" } */
      44  _Bool short x11; /* { dg-error "both 'short' and '_Bool' in declaration specifiers" } */
      45  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-1 } */
      46  char short x12; /* { dg-error "both 'short' and 'char' in declaration specifiers" } */
      47  float short x13; /* { dg-error "both 'short' and 'float' in declaration specifiers" } */
      48  double short x14; /* { dg-error "both 'short' and 'double' in declaration specifiers" } */
      49  unsigned signed x15; /* { dg-error "both 'signed' and 'unsigned' in declaration specifiers" } */
      50  void signed x16; /* { dg-error "both 'signed' and 'void' in declaration specifiers" } */
      51  _Bool signed x17; /* { dg-error "both 'signed' and '_Bool' in declaration specifiers" } */
      52  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-1 } */
      53  float signed x18; /* { dg-error "both 'signed' and 'float' in declaration specifiers" } */
      54  double signed x19; /* { dg-error "both 'signed' and 'double' in declaration specifiers" } */
      55  signed unsigned x20; /* { dg-error "both 'signed' and 'unsigned' in declaration specifiers" } */
      56  void unsigned x21; /* { dg-error "both 'unsigned' and 'void' in declaration specifiers" } */
      57  _Bool unsigned x22; /* { dg-error "both 'unsigned' and '_Bool' in declaration specifiers" } */
      58  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-1 } */
      59  float unsigned x23; /* { dg-error "both 'unsigned' and 'float' in declaration specifiers" } */
      60  double unsigned x24; /* { dg-error "both 'unsigned' and 'double' in declaration specifiers" } */
      61  void _Complex x25; /* { dg-error "both 'complex' and 'void' in declaration specifiers" } */
      62  /* { dg-warning "ISO C90 does not support complex types" "C90" { target *-*-* } .-1 } */
      63  _Bool _Complex x26; /* { dg-error "both 'complex' and '_Bool' in declaration specifiers" } */
      64  /* { dg-warning "ISO C90 does not support complex types" "C90" { target *-*-* } .-1 } */
      65  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-2 } */
      66  
      67  long void x27; /* { dg-error "both 'long' and 'void' in declaration specifiers" } */
      68  short void x28; /* { dg-error "both 'short' and 'void' in declaration specifiers" } */
      69  signed void x29; /* { dg-error "both 'signed' and 'void' in declaration specifiers" } */
      70  unsigned void x30; /* { dg-error "both 'unsigned' and 'void' in declaration specifiers" } */
      71  _Complex void x31; /* { dg-error "both 'complex' and 'void' in declaration specifiers" } */
      72  /* { dg-warning "ISO C90 does not support complex types" "C90" { target *-*-* } .-1 } */
      73  /* { dg-warning "ISO C does not support plain 'complex' meaning 'double complex'" "complex" { target *-*-* } .-2 } */
      74  long _Bool x32; /* { dg-error "both 'long' and '_Bool' in declaration specifiers" } */
      75  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-1 } */
      76  short _Bool x33; /* { dg-error "both 'short' and '_Bool' in declaration specifiers" } */
      77  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-1 } */
      78  signed _Bool x34; /* { dg-error "both 'signed' and '_Bool' in declaration specifiers" } */
      79  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-1 } */
      80  unsigned _Bool x35; /* { dg-error "both 'unsigned' and '_Bool' in declaration specifiers" } */
      81  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-1 } */
      82  _Complex _Bool x36; /* { dg-error "both 'complex' and '_Bool' in declaration specifiers" } */
      83  /* { dg-warning "ISO C90 does not support complex types" "C90" { target *-*-* } .-1 } */
      84  /* { dg-warning "ISO C90 does not support boolean types" "C90" { target *-*-* } .-2 } */
      85  /* { dg-warning "ISO C does not support plain 'complex' meaning 'double complex'" "complex" { target *-*-* } .-3 } */
      86  long char x37; /* { dg-error "both 'long' and 'char' in declaration specifiers" } */
      87  short char x38; /* { dg-error "both 'short' and 'char' in declaration specifiers" } */
      88  long float x39; /* { dg-error "both 'long' and 'float' in declaration specifiers" } */
      89  short float x40; /* { dg-error "both 'short' and 'float' in declaration specifiers" } */
      90  signed float x41; /* { dg-error "both 'signed' and 'float' in declaration specifiers" } */
      91  unsigned float x42; /* { dg-error "both 'unsigned' and 'float' in declaration specifiers" } */
      92  long long double x43; /* { dg-error "both 'long long' and 'double' in declaration specifiers" } */
      93  /* { dg-warning "ISO C90 does not support 'long long'" "C90" { target *-*-* } .-1 } */
      94  short double x44; /* { dg-error "both 'short' and 'double' in declaration specifiers" } */
      95  signed double x45; /* { dg-error "both 'signed' and 'double' in declaration specifiers" } */
      96  unsigned double x46; /* { dg-error "both 'unsigned' and 'double' in declaration specifiers" } */