OSDN Git Service

* gcc.dg/torture/builtin-noret-1.c (_exit, _Exit): Make weak.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / torture / builtin-noret-2.c
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
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
30 tabort (void)
31 {
32   extern void abort (void);
33   abort ();
34   link_failure ();
35 }
36
37 void
38 texit (void)
39 {
40   extern void exit (int);
41   exit (1);
42   link_failure ();
43 }
44
45 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
61 _exit (int i)
62 {
63   abort ();
64 }
65
66 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
82 _Exit (int i)
83 {
84   abort ();
85 }