(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
torture/
builtin-noret-2.c
       1  /* Test for builtin noreturn attributes when the visible declarations
       2     are function-local.  Modified from builtin-noret-1.c by Zack Weinberg
       3     <zack@codesourcery.com>.  */
       4  /* { dg-options "-multiply_defined suppress" { target powerpc-*-darwin* } } */
       5  /* { dg-do link } */
       6  /* { dg-require-weak "" } */
       7  /* { dg-prune-output "recognized" } */
       8  /* { dg-prune-output "ld: 0711-768 WARNING" } */
       9  
      10  extern void tabort (void);
      11  extern void texit (void);
      12  extern void t_exit (void);
      13  extern void t_Exit (void);
      14  
      15  extern void link_failure (void);
      16  
      17  int
      18  main (void)
      19  {
      20    volatile int i = 0;
      21    extern void exit (int);
      22    if (i)
      23      tabort ();
      24    if (i)
      25      texit ();
      26    if (i)
      27      t_exit ();
      28    if (i)
      29      t_Exit ();
      30    exit (0);
      31  }
      32  
      33  void
      34  tabort (void)
      35  {
      36    extern void abort (void);
      37    abort ();
      38    link_failure ();
      39  }
      40  
      41  void
      42  texit (void)
      43  {
      44    extern void exit (int);
      45    exit (1);
      46    link_failure ();
      47  }
      48  
      49  void
      50  t_exit (void)
      51  {
      52    extern void _exit (int);
      53    /* Some non-Unix libcs have _exit, and won't allow it to be re-defined,
      54       so make it weak.  */
      55  #pragma weak _exit
      56    _exit (1);
      57    link_failure ();
      58  }
      59  
      60  /* Some non-Unix libcs might not have _exit.  */
      61  /* Some non-Unix libcs have _exit, and won't allow it to be re-defined,
      62     so make it weak.  */
      63  #pragma weak _exit
      64  void
      65  _exit (int i)
      66  {
      67    extern void abort (void);
      68    abort ();
      69  }
      70  
      71  void
      72  t_Exit (void)
      73  {
      74    extern void _Exit (int);
      75    /* Some libcs have _Exit, and won't allow it to be re-defined,
      76       so make it weak.  */
      77  #pragma weak _Exit
      78    _Exit (1);
      79    link_failure ();
      80  }
      81  
      82  /* Some libcs might not have _Exit.  */
      83  /* Some libcs have _Exit, and won't allow it to be re-defined,
      84     so make it weak.  */
      85  #pragma weak _Exit
      86  void
      87  _Exit (int i)
      88  {
      89    extern void abort (void);
      90    abort ();
      91  }