OSDN Git Service

* gcc.dg/20020312-2.c: Check for __PPC__.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / 20020312-2.c
1 /* PR 5878. 
2
3    We ICEd in verify_local_live_at_start because we incorrectly forced
4    the PIC register live between BAR and BAZ.  We did this because the
5    definition of PIC_OFFSET_TABLE_REGNUM was incorrectly not INVALID_REGNUM
6    when !flag_pic for most targets.  */
7
8 /* { dg-do run } */
9 /* { dg-options "-O -fno-pic" } */
10
11 #if #cpu(a29k)
12 /* No pic register.  */
13 #elif defined(__alpha__)
14 /* PIC register is $29, but is used even without -fpic.  */
15 #elif defined(__arc__)
16 # define PIC_REG  "26"
17 #elif defined(__arm__)
18 # define PIC_REG  "9"
19 #elif defined(AVR)
20 /* No pic register.  */
21 #elif defined(__clipper__)
22 /* No pic register.  */
23 #elif defined(__convex__)
24 /* No pic register.  */
25 #elif defined(__cris__)
26 # define PIC_REG  "0"
27 #elif defined(__D30V__)
28 /* No pic register.  */
29 #elif defined(__dsp1600__)
30 /* No pic register.  */
31 #elif defined(__elxsi__)
32 /* No pic register.  */
33 #elif defined(__fr30__)
34 /* No pic register.  */
35 #elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__)
36 /* No pic register.  */
37 #elif defined(_IBMR2)
38 /* No pic register.  */
39 #elif #cpu(i370)
40 /* No pic register.  */
41 #elif defined(__i386__)
42 # define PIC_REG  "ebx"
43 #elif defined(__i860__)
44 /* No pic register.  */
45 #elif defined(__i960__)
46 /* No pic register.  */
47 #elif defined(__ia64__)
48 /* PIC register is r1, but is used even without -fpic.  */
49 #elif defined(__M32R__)
50 /* No pic register.  */
51 #elif defined(__m68k__)
52 # define PIC_REG  "a5"
53 #elif defined(__m88k__)
54 # define PIC_REG  "25"
55 #elif defined(__mc68hc1x__)
56 /* No pic register.  */
57 #elif defined(__mcore__)
58 /* No pic register.  */
59 #elif defined(__mips__)
60 /* PIC register is $28, but is used even without -fpic.  */
61 #elif defined(__MMIX__)
62 /* No pic register.  */
63 #elif defined(__mn10200__)
64 /* No pic register.  */
65 #elif defined(__mn10300__)
66 /* No pic register.  */
67 #elif #cpu(ns32k)
68 /* No pic register.  */
69 #elif defined(__parisc__)
70 /* PIC register is %r27 or %r19, but is used even without -fpic.  */
71 #elif defined(__pdp11__)
72 /* No pic register.  */
73 #elif defined(__pj__)
74 /* No pic register.  */
75 #elif defined(__powerpc__) || defined(__PPC__)
76 # ifdef __darwin__
77 #  define PIC_REG  "31"
78 # else
79 #  define PIC_REG  "30"
80 # endif
81 #elif defined(__ibm032__) /* aka romp */
82 /* No pic register.  */
83 #elif defined(__s390__)
84 # define PIC_REG  "12"
85 #elif defined(__sparc__)
86 # define PIC_REG  "l7"
87 #elif defined(__v850)
88 /* No pic register.  */
89 #elif defined(__vax__)
90 /* No pic register.  */
91 #elif defined(__we32000__)
92 /* No pic register.  */
93 #elif defined(__xstormy16__)
94 /* No pic register.  */
95 #elif defined(__XTENSA__)
96 /* No pic register.  */
97 #elif defined(__sh__)
98 # define PIC_REG  "r12"
99 #else
100 # error "Modify the test for your target."
101 #endif
102
103 #if defined PIC_REG && !defined __PIC__ && !defined __pic__
104 register void *reg __asm__(PIC_REG);
105 #else
106 /* We really need a global register variable set to the PIC register
107    to expose the bug.  Oh well, let the test case not fail.  */
108 static void *reg;
109 #endif
110
111 void * __attribute__((noinline))
112 dummy (void *x)
113 {
114   return x;
115 }
116
117 void
118 f (void)
119 {
120   goto *dummy (&&bar);
121   for (;;)
122     {
123     foo:
124       reg = (void *) 1;
125       if (!reg)
126         goto baz;
127       reg = &&foo;
128     }
129
130  bar:
131  baz:
132   reg = 0;
133 }
134
135 int
136 main()
137 {
138   void *old_reg = reg;
139   reg = (void *) 1;
140
141   f ();
142
143   /* Additionally test that the prologue/epilogue properly does *not*
144      save and restore global registers.  Not possible when the PIC
145      register is in a register window, of course.  */
146 #ifndef __sparc__
147   if (reg)
148     abort ();
149 #endif
150
151   reg = old_reg;
152   return 0;
153 }