]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gcc.dg/20020312-2.c
Commit of nios2 port to trunk:
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / 20020312-2.c
CommitLineData
5b43fed1
RH
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
ee712eab
JM
11extern void abort (void);
12
cdc497dd 13#if defined(__alpha__)
5b43fed1
RH
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. */
5b43fed1
RH
21#elif defined(__cris__)
22# define PIC_REG "0"
feeeff5c
JR
23#elif defined(__epiphany__)
24#define PIC_REG "r28"
5b43fed1
RH
25#elif defined(__fr30__)
26/* No pic register. */
27#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__)
28/* No pic register. */
97c6c02c
DE
29#elif defined(_IBMR2)
30/* No pic register. */
5b43fed1
RH
31#elif defined(__i386__)
32# define PIC_REG "ebx"
5b43fed1
RH
33#elif defined(__ia64__)
34/* PIC register is r1, but is used even without -fpic. */
aa4945c1
JB
35#elif defined(__lm32__)
36/* No pic register. */
5b43fed1
RH
37#elif defined(__M32R__)
38/* No pic register. */
39#elif defined(__m68k__)
40# define PIC_REG "a5"
5b43fed1
RH
41#elif defined(__mc68hc1x__)
42/* No pic register. */
43#elif defined(__mcore__)
44/* No pic register. */
debd11d9
EI
45#elif defined(__MICROBLAZE__)
46# define PIC_REG "r20"
5b43fed1
RH
47#elif defined(__mips__)
48/* PIC register is $28, but is used even without -fpic. */
a541f1aa
HPN
49#elif defined(__MMIX__)
50/* No pic register. */
5b43fed1
RH
51#elif defined(__mn10300__)
52/* No pic register. */
35b954c1
AG
53#elif defined(__moxie__)
54/* No pic register. */
199f847c
CJW
55#elif defined(__nds32__)
56/* No pic register. */
e430824f
CLT
57#elif defined(__nios2__)
58/* No pic register. */
1f73c622 59#elif defined(__hppa__)
5b43fed1
RH
60/* PIC register is %r27 or %r19, but is used even without -fpic. */
61#elif defined(__pdp11__)
62/* No pic register. */
e8a861bd 63#elif defined(__powerpc__) || defined(__PPC__) || defined(__POWERPC__) || defined (__ppc)
2ee2d707 64# ifdef __MACH__
5b43fed1
RH
65# define PIC_REG "31"
66# else
67# define PIC_REG "30"
68# endif
7036ee24
NC
69#elif defined(__RX__)
70/* No pic register. */
5b43fed1
RH
71#elif defined(__s390__)
72# define PIC_REG "12"
73#elif defined(__sparc__)
74# define PIC_REG "l7"
dd552284
WL
75#elif defined(__tile__)
76# define PIC_REG "r51"
294689c4
BS
77#elif defined(__TMS320C6X__)
78# define PIC_REG "B14"
5b43fed1
RH
79#elif defined(__v850)
80/* No pic register. */
81#elif defined(__vax__)
82/* No pic register. */
5b43fed1
RH
83#elif defined(__xstormy16__)
84/* No pic register. */
85#elif defined(__XTENSA__)
86/* No pic register. */
309d8365
R
87#elif defined(__sh__)
88# define PIC_REG "r12"
278bba8b 89#elif defined(__x86_64__)
a239aa95
DD
90/* No pic register. */
91#elif defined(__m32c__)
278bba8b 92/* No pic register. */
69a0f8c6
BE
93#elif defined(__SPU__)
94# define PIC_REG "126"
b91670c7 95#elif defined (__frv__)
c807acf9
NC
96# ifdef __FRV_FDPIC__
97# define PIC_REG "gr15"
98# else
99# define PIC_REG "gr17"
100#endif
402d3de3
IB
101#elif defined (__aarch64__)
102/* No pic register -- yet. */
ac63f305
NC
103#elif defined(__RL78__)
104/* No pic register. */
105#elif defined(__MSP430__)
106/* No pic register. */
5b43fed1
RH
107#else
108# error "Modify the test for your target."
109#endif
110
a4fa73f3 111#if defined PIC_REG && !defined __PIC__ && !defined __pic__
5b43fed1
RH
112register void *reg __asm__(PIC_REG);
113#else
114/* We really need a global register variable set to the PIC register
115 to expose the bug. Oh well, let the test case not fail. */
116static void *reg;
117#endif
118
119void * __attribute__((noinline))
120dummy (void *x)
121{
122 return x;
123}
124
125void
126f (void)
127{
128 goto *dummy (&&bar);
129 for (;;)
130 {
131 foo:
132 reg = (void *) 1;
133 if (!reg)
134 goto baz;
135 reg = &&foo;
136 }
137
138 bar:
139 baz:
140 reg = 0;
141}
142
143int
144main()
145{
146 void *old_reg = reg;
147 reg = (void *) 1;
9a1d8b2d 148
5b43fed1 149 f ();
9a1d8b2d
RH
150
151 /* Additionally test that the prologue/epilogue properly does *not*
152 save and restore global registers. Not possible when the PIC
2ee2d707
GK
153 register is in a register window, of course. On Darwin, you can't
154 call library routines from non-PIC code. */
e69d504e 155#if !defined (__sparc__) && !defined(__MACH__)
5b43fed1
RH
156 if (reg)
157 abort ();
9a1d8b2d
RH
158#endif
159
5b43fed1
RH
160 reg = old_reg;
161 return 0;
162}