OSDN Git Service

PR middle-end/19984
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / 20020219-1.c
1 /* PR c/4389
2    This testcase failed because host_integerp (x, 0) was returning
3    1 even for constants bigger than 2^31.  It fails under under hppa
4    hpux without -mdisable-indexing because the pointer x - 1 is used
5    as the base address of an indexed load.  Because the struct A is not
6    actually allocated, x - 1 lies in the text segment and this causes
7    the wrong space register to be selected for the load.  It fails on
8    IA64 hpux in ILP32 mode because extending x - 1 before adding the
9    array offset gives a different answer then adding first and then
10    extending.  The underlying problem is the same as with hppa, x - 1 is
11    not a legal data address.  */
12 /* { dg-do run } */
13 /* { dg-options "-O2" } */
14 /* { dg-options "-O2 -mdisable-indexing" { target hppa*-*-hpux* } } */
15 /* { dg-skip-if "" { "ia64-*-hpux*" } "*" "-mlp64" } */
16
17 /* Disable the test entirely for 16-bit targets.  */
18 #if __INT_MAX__ > 32767
19
20 extern void abort (void);
21 extern void exit (int);
22 struct A {
23   int a[10000][10000];
24 };
25 int b[2] = { 213151, 0 };
26
27 void foo (struct A *x, int y)
28 {
29   if (x->a[9999][9999] != x->a[y][y])
30     abort ();
31   if (x->a[9999][9999] != 213151)
32     abort ();
33 }
34
35 int main (void)
36 {
37   struct A *x;
38   asm ("" : "=r" (x) : "0" (&b[1]));
39   foo (x - 1, 9999);
40   exit (0);
41 }
42
43 #else
44
45 int main () { return 0; }
46
47 #endif /* __INT_MAX__ */