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
foo(int x)26 int foo (int x)
27 {
28 return x < 0 ? -x : x;
29 }
30
bar(struct C * x,struct A * y)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
main()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 }
70