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