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 main(void)18main (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 tabort(void)34tabort (void) 35 { 36 extern void abort (void); 37 abort (); 38 link_failure (); 39 } 40 41 void texit(void)42texit (void) 43 { 44 extern void exit (int); 45 exit (1); 46 link_failure (); 47 } 48 49 void t_exit(void)50t_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 _exit(int i)65_exit (int i) 66 { 67 extern void abort (void); 68 abort (); 69 } 70 71 void t_Exit(void)72t_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 _Exit(int i)87_Exit (int i) 88 { 89 extern void abort (void); 90 abort (); 91 } 92