OSDN Git Service

* gcc.dg/20020312-2.c [__MMIX__]: No pic register.
[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 #cpu(i370)
38 /* No pic register.  */
39 #elif defined(__i386__)
40 # define PIC_REG  "ebx"
41 #elif defined(__i860__)
42 /* No pic register.  */
43 #elif defined(__i960__)
44 /* No pic register.  */
45 #elif defined(__ia64__)
46 /* PIC register is r1, but is used even without -fpic.  */
47 #elif defined(__M32R__)
48 /* No pic register.  */
49 #elif defined(__m68k__)
50 # define PIC_REG  "a5"
51 #elif defined(__m88k__)
52 # define PIC_REG  "25"
53 #elif defined(__mc68hc1x__)
54 /* No pic register.  */
55 #elif defined(__mcore__)
56 /* No pic register.  */
57 #elif defined(__mips__)
58 /* PIC register is $28, but is used even without -fpic.  */
59 #elif defined(__MMIX__)
60 /* No pic register.  */
61 #elif defined(__mn10200__)
62 /* No pic register.  */
63 #elif defined(__mn10300__)
64 /* No pic register.  */
65 #elif #cpu(ns32k)
66 /* No pic register.  */
67 #elif defined(__parisc__)
68 /* PIC register is %r27 or %r19, but is used even without -fpic.  */
69 #elif defined(__pdp11__)
70 /* No pic register.  */
71 #elif defined(__pj__)
72 /* No pic register.  */
73 #elif defined(__powerpc__)
74 # ifdef __darwin__
75 #  define PIC_REG  "31"
76 # else
77 #  define PIC_REG  "30"
78 # endif
79 #elif defined(__ibm032__) /* aka romp */
80 /* No pic register.  */
81 #elif defined(__s390__)
82 # define PIC_REG  "12"
83 #elif defined(__sparc__)
84 # define PIC_REG  "l7"
85 #elif defined(__v850)
86 /* No pic register.  */
87 #elif defined(__vax__)
88 /* No pic register.  */
89 #elif defined(__we32000__)
90 /* No pic register.  */
91 #elif defined(__xstormy16__)
92 /* No pic register.  */
93 #elif defined(__XTENSA__)
94 /* No pic register.  */
95 #else
96 # error "Modify the test for your target."
97 #endif
98
99 #ifdef PIC_REG
100 register void *reg __asm__(PIC_REG);
101 #else
102 /* We really need a global register variable set to the PIC register
103    to expose the bug.  Oh well, let the test case not fail.  */
104 static void *reg;
105 #endif
106
107 void * __attribute__((noinline))
108 dummy (void *x)
109 {
110   return x;
111 }
112
113 void
114 f (void)
115 {
116   goto *dummy (&&bar);
117   for (;;)
118     {
119     foo:
120       reg = (void *) 1;
121       if (!reg)
122         goto baz;
123       reg = &&foo;
124     }
125
126  bar:
127  baz:
128   reg = 0;
129 }
130
131 int
132 main()
133 {
134   void *old_reg = reg;
135   reg = (void *) 1;
136   f ();
137   if (reg)
138     abort ();
139   reg = old_reg;
140   return 0;
141 }