2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / gcc.dg / 20020312-2.c
blob082190b3c36948e9369bcceb46f7d799bf5ce138
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" } */
11 #if defined(__alpha__)
12 /* PIC register is $29, but is used even without -fpic. */
13 #elif defined(__arc__)
14 # define PIC_REG "26"
15 #elif defined(__arm__)
16 # define PIC_REG "9"
17 #elif defined(AVR)
18 /* No pic register. */
19 #elif defined(__cris__)
20 # define PIC_REG "0"
21 #elif defined(__D30V__)
22 /* No pic register. */
23 #elif defined(__dsp1600__)
24 /* No pic register. */
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 #cpu(i370)
32 /* No pic register. */
33 #elif defined(__i386__)
34 # define PIC_REG "ebx"
35 #elif defined(__i960__)
36 /* No pic register. */
37 #elif defined(__ia64__)
38 /* PIC register is r1, but is used even without -fpic. */
39 #elif defined(__M32R__)
40 /* No pic register. */
41 #elif defined(__m68k__)
42 # define PIC_REG "a5"
43 #elif defined(__m88k__)
44 # define PIC_REG "25"
45 #elif defined(__mc68hc1x__)
46 /* No pic register. */
47 #elif defined(__mcore__)
48 /* No pic register. */
49 #elif defined(__mips__)
50 /* PIC register is $28, but is used even without -fpic. */
51 #elif defined(__MMIX__)
52 /* No pic register. */
53 #elif defined(__mn10200__)
54 /* No pic register. */
55 #elif defined(__mn10300__)
56 /* No pic register. */
57 #elif #cpu(ns32k)
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__)
64 # ifdef __MACH__
65 # define PIC_REG "31"
66 # else
67 # define PIC_REG "30"
68 # endif
69 #elif defined(__ibm032__) /* aka romp */
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(__v850)
76 /* No pic register. */
77 #elif defined(__vax__)
78 /* No pic register. */
79 #elif defined(__xstormy16__)
80 /* No pic register. */
81 #elif defined(__XTENSA__)
82 /* No pic register. */
83 #elif defined(__sh__)
84 # define PIC_REG "r12"
85 #elif defined(__x86_64__)
86 /* No pic register. */
87 #else
88 # error "Modify the test for your target."
89 #endif
91 #if defined PIC_REG && !defined __PIC__ && !defined __pic__
92 register void *reg __asm__(PIC_REG);
93 #else
94 /* We really need a global register variable set to the PIC register
95 to expose the bug. Oh well, let the test case not fail. */
96 static void *reg;
97 #endif
99 void * __attribute__((noinline))
100 dummy (void *x)
102 return x;
105 void
106 f (void)
108 goto *dummy (&&bar);
109 for (;;)
111 foo:
112 reg = (void *) 1;
113 if (!reg)
114 goto baz;
115 reg = &&foo;
118 bar:
119 baz:
120 reg = 0;
124 main()
126 void *old_reg = reg;
127 reg = (void *) 1;
129 f ();
131 /* Additionally test that the prologue/epilogue properly does *not*
132 save and restore global registers. Not possible when the PIC
133 register is in a register window, of course. On Darwin, you can't
134 call library routines from non-PIC code. */
135 #if !defined (__sparc__) && !(defined(__MACH__) && defined(__POWERPC__))
136 if (reg)
137 abort ();
138 #endif
140 reg = old_reg;
141 return 0;