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)15 main (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)30 tabort (void)
31 {
32   extern void abort (void);
33   abort ();
34   link_failure ();
35 }
36 
37 void
texit(void)38 texit (void)
39 {
40   extern void exit (int);
41   exit (1);
42   link_failure ();
43 }
44 
45 void
t_exit(void)46 t_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)67 t_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