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