(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
c2x-attr-syntax-2.c
       1  /* Test C2x attribute syntax.  Test ignored attributes diagnosed.  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-std=c2x -pedantic-errors" } */
       4  
       5  /* A GNU attribute that is valid in some contexts, but should be
       6     diagnosed in contexts where all attributes are ignored (attribute
       7     declarations, except for fallthrough attributes, and
       8     statements).  */
       9  #define CTX [[gnu::const]]
      10  
      11  /* An attribute that is unknown, so ignored with a warning.  */
      12  #define UNK [[gnu::no_such_attribute(![!(!)!]!,;;)]]
      13  
      14  CTX; /* { dg-warning "ignored" } */
      15  UNK; /* { dg-warning "ignored" } */
      16  
      17  UNK extern int a; /* { dg-warning "ignored" } */
      18  extern int UNK a; /* { dg-warning "ignored" } */
      19  extern int a UNK; /* { dg-warning "ignored" } */
      20  
      21  int f () UNK; /* { dg-warning "ignored" } */
      22  int f (void) UNK; /* { dg-warning "ignored" } */
      23  int g (UNK int a); /* { dg-warning "ignored" } */
      24  int g (int UNK a); /* { dg-warning "ignored" } */
      25  int g (int a UNK); /* { dg-warning "ignored" } */
      26  int g (UNK int); /* { dg-warning "ignored" } */
      27  int g (int UNK); /* { dg-warning "ignored" } */
      28  int g (int) UNK; /* { dg-warning "ignored" } */
      29  
      30  int *UNK p; /* { dg-warning "ignored" } */
      31  int b[3] UNK; /* { dg-warning "ignored" } */
      32  
      33  int h (int () UNK); /* { dg-warning "ignored" } */
      34  
      35  struct UNK s; /* { dg-warning "ignored" } */
      36  union UNK u; /* { dg-warning "ignored" } */
      37  
      38  struct UNK s2 { int a; }; /* { dg-warning "ignored" } */
      39  union UNK u2 { int a; }; /* { dg-warning "ignored" } */
      40  
      41  struct s3 { UNK int a; }; /* { dg-warning "ignored" } */
      42  struct s4 { int UNK a; }; /* { dg-warning "ignored" } */
      43  union u3 { UNK int a; }; /* { dg-warning "ignored" } */
      44  union u4 { int UNK a; }; /* { dg-warning "ignored" } */
      45  
      46  int z = sizeof (int UNK); /* { dg-warning "ignored" } */
      47  
      48  enum UNK { E1 }; /* { dg-warning "ignored" } */
      49  enum { E2 UNK }; /* { dg-warning "ignored" } */
      50  enum { E3 UNK = 4 }; /* { dg-warning "ignored" } */
      51  
      52  void
      53  func (void) UNK { /* { dg-warning "ignored" } */
      54    UNK int var; /* { dg-warning "ignored" } */
      55    CTX { } /* { dg-warning "ignored" } */
      56    CTX; /* { dg-warning "ignored" } */
      57    CTX var = 1; /* { dg-warning "ignored" } */
      58    CTX x: var = 2; /* { dg-warning "ignored" } */
      59    for (UNK int zz = 1; zz < 10; zz++) ; /* { dg-warning "ignored" } */
      60  }