(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
c2x-attr-noreturn-2.c
       1  /* Test C2x noreturn attribute: invalid contexts.  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-std=c2x -pedantic-errors" } */
       4  
       5  [[noreturn]]; /* { dg-error "ignored" } */
       6  
       7  int [[noreturn]] var; /* { dg-error "ignored" } */
       8  
       9  int array_with_dep_type[2] [[noreturn]]; /* { dg-error "ignored" } */
      10  
      11  void fn_with_dep_type () [[noreturn]]; /* { dg-error "ignored" } */
      12  
      13  int z = sizeof (int [[__noreturn__]]); /* { dg-error "ignored" } */
      14  
      15  [[noreturn]] int x1; /* { dg-error "can only be applied to functions" } */
      16  int x2 [[__noreturn__]]; /* { dg-error "can only be applied to functions" } */
      17  
      18  [[_Noreturn]] void (*fp) (); /* { dg-error "can only be applied to functions" } */
      19  
      20  void
      21  f (void)
      22  {
      23    int a;
      24    [[_Noreturn]]; /* { dg-error "ignored" } */
      25    [[___Noreturn__]] a = 1; /* { dg-error "ignored" } */
      26  }
      27  
      28  int
      29  g ([[noreturn]] int x, int y) /* { dg-error "can only be applied to functions" } */
      30  {
      31    [[noreturn]] typedef float F; /* { dg-error "can only be applied to functions" } */
      32    [[noreturn]] int a; /* { dg-error "can only be applied to functions" } */
      33    int b [[__noreturn__]]; /* { dg-error "can only be applied to functions" } */
      34    int c [[noreturn]]; /* { dg-error "can only be applied to functions" } */
      35    [[__noreturn__]] label1: ; /* { dg-error "can only be applied to functions" } */
      36    c = y;
      37    [[noreturn]] label2: ; /* { dg-error "can only be applied to functions" } */
      38    return y;
      39  }
      40  
      41  struct [[_Noreturn]] s { double d; }; /* { dg-error "can only be applied to functions" } */
      42  
      43  struct s2
      44  {
      45    [[___Noreturn__]] int a; /* { dg-error "can only be applied to functions" } */
      46    int b [[noreturn]]; /* { dg-error "can only be applied to functions" } */
      47  } x;
      48  
      49  enum e { E1 [[noreturn]] }; /* { dg-error "can only be applied to functions" } */
      50  
      51  union [[_Noreturn]] u { int x; }; /* { dg-error "can only be applied to functions" } */
      52  
      53  enum [[noreturn]] eu { E2 }; /* { dg-error "can only be applied to functions" } */
      54  
      55  void fx ([[noreturn]] int p); /* { dg-error "can only be applied" } */
      56  
      57  union u2
      58  {
      59    [[noreturn]] int a; /* { dg-error "can only be applied to functions" } */
      60    int b [[noreturn]]; /* { dg-error "can only be applied to functions" } */
      61  } y;
      62  
      63  void
      64  g2 (int x)
      65  {
      66    switch (x)
      67      {
      68        [[noreturn]] case 1: ; /* { dg-error "can only be applied to functions" } */
      69        [[__noreturn__]] case 2: ; /* { dg-error "can only be applied to functions" } */
      70        [[noreturn]] default: ; /* { dg-error "can only be applied to functions" } */
      71      }
      72  }