(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
c11-noreturn-1.c
       1  /* Test C11 _Noreturn.  Test valid code.  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-std=c11 -pedantic-errors" } */
       4  
       5  _Noreturn void exit (int);
       6  
       7  _Noreturn int f1 (void);
       8  
       9  _Noreturn void f2 (void);
      10  
      11  static void _Noreturn f3 (void) { exit (0); }
      12  
      13  /* Returning from a noreturn function is undefined at runtime, not a
      14     constraint violation, but recommended practice is to diagnose if
      15     such a return appears possible.  */
      16  
      17  _Noreturn int
      18  f4 (void)
      19  {
      20    return 1; /* { dg-warning "has a 'return' statement" } */
      21    /* { dg-warning "does return" "second warning" { target *-*-* } .-1 } */
      22  }
      23  
      24  _Noreturn void
      25  f5 (void)
      26  {
      27    return; /* { dg-warning "has a 'return' statement" } */
      28    /* { dg-warning "does return" "second warning" { target *-*-* } .-1 } */
      29  }
      30  
      31  _Noreturn void
      32  f6 (void)
      33  {
      34  } /* { dg-warning "does return" } */
      35  
      36  _Noreturn void
      37  f7 (int a)
      38  {
      39    if (a)
      40      exit (0);
      41  } /* { dg-warning "does return" } */
      42  
      43  /* Declarations need not all have _Noreturn.  */
      44  
      45  void f2 (void);
      46  
      47  void f8 (void);
      48  _Noreturn void f8 (void);
      49  
      50  /* Duplicate _Noreturn is OK.  */
      51  _Noreturn _Noreturn void _Noreturn f9 (void);
      52  
      53  /* _Noreturn does not affect type compatibility.  */
      54  
      55  void (*fp) (void) = f5;
      56  
      57  /* noreturn is an ordinary identifier.  */
      58  
      59  int noreturn;