xref: /openbsd-src/gnu/usr.bin/gcc/gcc/testsuite/gcc.c-torture/execute/builtin-noret-1.c (revision c87b03e512fc05ed6e0222f6fb0ae86264b1d05b)
1 /* Test for builtin noreturn attributes.  */
2 /* Origin: Joseph Myers <jsm28@cam.ac.uk> */
3 
4 extern void abort (void);
5 extern void exit (int);
6 extern void _exit (int);
7 extern void _Exit (int);
8 
9 extern void tabort (void);
10 extern void texit (void);
11 extern void t_exit (void);
12 extern void t_Exit (void);
13 
14 extern void link_failure (void);
15 
16 int
main(void)17 main (void)
18 {
19   volatile int i = 0;
20   /* The real test here is that the program links.  */
21   if (i)
22     tabort ();
23   if (i)
24     texit ();
25   if (i)
26     t_exit ();
27   if (i)
28     t_Exit ();
29   exit (0);
30 }
31 
32 void
tabort(void)33 tabort (void)
34 {
35   abort ();
36   link_failure ();
37 }
38 
39 void
texit(void)40 texit (void)
41 {
42   exit (1);
43   link_failure ();
44 }
45 
46 void
t_exit(void)47 t_exit (void)
48 {
49   _exit (1);
50   link_failure ();
51 }
52 
53 /* Some non-Unix libcs might not have _exit.  This version should never
54    get called.  */
55 static void
_exit(int i)56 _exit (int i)
57 {
58   abort ();
59 }
60 
61 void
t_Exit(void)62 t_Exit (void)
63 {
64   _Exit (1);
65   link_failure ();
66 }
67 
68 /* Some libcs might not have _Exit.  This version should never get called.  */
69 static void
_Exit(int i)70 _Exit (int i)
71 {
72   abort ();
73 }
74 
75 /* When optimizing, no calls to link_failure should remain.  In any case,
76    link_failure should not be called.  */
77 
78 #ifndef __OPTIMIZE__
79 void
link_failure(void)80 link_failure (void)
81 {
82   abort ();
83 }
84 #endif
85