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 7 extern void tabort (void); 8 extern void texit (void); 9 extern void t_exit (void); 10 extern void t_Exit (void); 11 12 extern void link_failure (void); 13 14 int main(void)15main (void) 16 { 17 volatile int i = 0; 18 if (i) 19 tabort (); 20 if (i) 21 texit (); 22 if (i) 23 t_exit (); 24 if (i) 25 t_Exit (); 26 exit (0); 27 } 28 29 void tabort(void)30tabort (void) 31 { 32 extern void abort (void); 33 abort (); 34 link_failure (); 35 } 36 37 void texit(void)38texit (void) 39 { 40 extern void exit (int); 41 exit (1); 42 link_failure (); 43 } 44 45 void t_exit(void)46t_exit (void) 47 { 48 extern void _exit (int); 49 /* Some non-Unix libcs have _exit, and won't allow it to be re-defined, 50 so make it weak. */ 51 #pragma weak _exit 52 _exit (1); 53 link_failure (); 54 } 55 56 /* Some non-Unix libcs might not have _exit. */ 57 /* Some non-Unix libcs have _exit, and won't allow it to be re-defined, 58 so make it weak. */ 59 #pragma weak _exit 60 void _exit(int i)61_exit (int i) 62 { 63 abort (); 64 } 65 66 void t_Exit(void)67t_Exit (void) 68 { 69 extern void _Exit (int); 70 /* Some libcs have _Exit, and won't allow it to be re-defined, 71 so make it weak. */ 72 #pragma weak _Exit 73 _Exit (1); 74 link_failure (); 75 } 76 77 /* Some libcs might not have _Exit. */ 78 /* Some libcs have _Exit, and won't allow it to be re-defined, 79 so make it weak. */ 80 #pragma weak _Exit 81 void _Exit(int i)82_Exit (int i) 83 { 84 abort (); 85 } 86