OSDN Git Service

Merge lto branch into trunk.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / 20030717-1.c
1 /* PR target/11087
2    This testcase was miscompiled on ppc64, because basic_induction_var called
3    convert_modes, yet did not expect it to emit any new instructions.
4    Those were emitted at the end of the function and destroyed during life
5    analysis, while the program used uninitialized pseudos created by
6    convert_modes.  */
7
8 struct A
9 {
10   unsigned short a1;
11   unsigned long a2;
12 };
13
14 struct B
15 {
16   int b1, b2, b3, b4, b5;
17 };
18
19 struct C
20 {
21   struct B c1[1];
22   int c2, c3;
23 };
24
25 static
26 int foo (int x)
27 {
28   return  x < 0 ? -x : x;
29 }
30
31 int bar (struct C *x, struct A *y)
32 {
33   int a = x->c3;
34   const int b = y->a1 >> 9;
35   const unsigned long c = y->a2;
36   int d = a;
37   unsigned long e, f;
38
39   f = foo (c - x->c1[d].b4);
40   do
41     {
42       if (d <= 0)
43         d = x->c2;
44       d--;
45
46       e = foo (c-x->c1[d].b4);
47       if (e < f)
48         a = d;
49     }
50   while (d != x->c3);
51   x->c1[a].b4 = c + b;
52   return a;
53 }
54
55 int
56 main ()
57 {
58   struct A a;
59   struct C b;
60   int c;
61
62   a.a1 = 512;
63   a.a2 = 4242;
64   __builtin_memset (&b, 0, sizeof (b));
65   b.c1[0].b3 = 424242;
66   b.c2 = 1;
67   c = bar (&b, &a);
68   return 0;
69 }