Require target lra in gcc.dg/pr108095.c
[official-gcc.git] / gcc / testsuite / gcc.dg / 20020312-2.c
blob92bc150df0fc8f7871e05f6e9930eec6404fc895
1 /* PR 5878.
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. */
8 /* { dg-do run } */
9 /* { dg-options "-O -fno-pic" } */
10 /* { dg-additional-options "-no-pie" { target pie_enabled } } */
11 /* { dg-require-effective-target nonlocal_goto } */
12 /* { dg-skip-if "" { arm*-*-uclinuxfdpiceabi } "*" "" } */
14 extern void abort (void);
16 #if defined(__alpha__)
17 /* PIC register is $29, but is used even without -fpic. */
18 #elif defined(__arc__)
19 # define PIC_REG "26"
20 #elif defined(__arm__)
21 # define PIC_REG "9"
22 #elif defined(AVR)
23 /* No pic register. */
24 #elif defined(__cris__)
25 # define PIC_REG "0"
26 #elif defined(__epiphany__)
27 #define PIC_REG "r28"
28 #elif defined(__fr30__)
29 /* No pic register. */
30 #elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__)
31 /* No pic register. */
32 #elif defined(_IBMR2)
33 /* No pic register. */
34 #elif defined(__i386__)
35 # define PIC_REG "ebx"
36 #elif defined(__ia64__)
37 /* PIC register is r1, but is used even without -fpic. */
38 #elif defined(__lm32__)
39 /* No pic register. */
40 #elif defined(__loongarch__)
41 /* No pic register. */
42 #elif defined(__M32R__)
43 /* No pic register. */
44 #elif defined(__m68k__)
45 # define PIC_REG "a5"
46 #elif defined(__mc68hc1x__)
47 /* No pic register. */
48 #elif defined(__mcore__)
49 /* No pic register. */
50 #elif defined(__MICROBLAZE__)
51 # define PIC_REG "r20"
52 #elif defined(__mips__)
53 /* PIC register is $28, but is used even without -fpic. */
54 #elif defined(__MMIX__)
55 /* No pic register. */
56 #elif defined(__mn10300__)
57 /* No pic register. */
58 #elif defined(__moxie__)
59 /* No pic register. */
60 #elif defined(__nds32__)
61 /* No pic register. */
62 #elif defined(__nios2__)
63 /* No pic register. */
64 #elif defined(__hppa__)
65 /* PIC register is %r27 or %r19, but is used even without -fpic. */
66 #elif defined(__pdp11__)
67 /* No pic register. */
68 #elif defined(__powerpc__) || defined(__PPC__) || defined(__POWERPC__) || defined (__ppc)
69 # ifdef __MACH__
70 # define PIC_REG "31"
71 # else
72 # define PIC_REG "30"
73 # endif
74 #elif defined(__riscv)
75 /* No pic register. */
76 #elif defined(__RX__)
77 /* No pic register. */
78 #elif defined(__s390__)
79 # define PIC_REG "12"
80 #elif defined(__sparc__)
81 # define PIC_REG "l7"
82 #elif defined(__tile__)
83 # define PIC_REG "r51"
84 #elif defined(__TMS320C6X__)
85 # define PIC_REG "B14"
86 #elif defined(__v850)
87 /* No pic register. */
88 #elif defined(__vax__)
89 /* No pic register. */
90 #elif defined(__VISIUM__)
91 /* No pic register. */
92 #elif defined(__xstormy16__)
93 /* No pic register. */
94 #elif defined(__XTENSA__)
95 /* No pic register. */
96 #elif defined(__sh__)
97 # define PIC_REG "r12"
98 #elif defined(__x86_64__)
99 /* No pic register. */
100 #elif defined(__m32c__)
101 /* No pic register. */
102 #elif defined (__frv__)
103 # ifdef __FRV_FDPIC__
104 # define PIC_REG "gr15"
105 # else
106 # define PIC_REG "gr17"
107 #endif
108 #elif defined (__aarch64__)
109 /* No pic register -- yet. */
110 #elif defined(__RL78__)
111 /* No pic register. */
112 #elif defined(__MSP430__)
113 /* No pic register. */
114 #elif defined (__nvptx__)
115 /* No pic register. */
116 #elif defined (__csky__)
117 /* Pic register is r28, but some cores only have r0-r15. */
118 # if defined (__CK807__) || defined (__CK810__)
119 # define PIC_REG "r28"
120 # endif
121 #elif defined (__or1k__)
122 /* No pic register. */
123 #elif defined (__AMDGCN__)
124 /* No pic register. */
125 #elif defined(__PRU__)
126 /* No pic register. */
127 #else
128 # error "Modify the test for your target."
129 #endif
131 #if defined PIC_REG && !defined __PIC__ && !defined __pic__
132 register void *reg __asm__(PIC_REG);
133 #else
134 /* We really need a global register variable set to the PIC register
135 to expose the bug. Oh well, let the test case not fail. */
136 static void *reg;
137 #endif
139 void * __attribute__((noinline))
140 dummy (void *x)
142 return x;
145 void
146 f (void)
148 goto *dummy (&&bar);
149 for (;;)
151 foo:
152 reg = (void *) 1;
153 if (!reg)
154 goto baz;
155 reg = &&foo;
158 bar:
159 baz:
160 reg = 0;
164 main()
166 void *old_reg = reg;
167 reg = (void *) 1;
169 f ();
171 /* Additionally test that the prologue/epilogue properly does *not*
172 save and restore global registers. Not possible when the PIC
173 register is in a register window, of course. On Darwin, you can't
174 call library routines from non-PIC code. */
175 #if !defined (__sparc__) && !defined(__MACH__)
176 if (reg)
177 abort ();
178 #endif
180 reg = old_reg;
181 return 0;