1 // { dg-do run }
2
3 struct A
4 {
5 short int a1;
6 unsigned char a2;
7 unsigned int a3;
8 };
9
10 struct B
11 {
12 unsigned short b1;
13 const A *b2;
14 };
15
16 B b;
17
18 __attribute__((noinline, noclone))
foo(unsigned x)19 int foo (unsigned x)
20 {
21 __asm volatile ("" : "+r" (x) : : "memory");
22 return x;
23 }
24
25 inline void
bar(const int &)26 bar (const int &)
27 {
28 }
29
30 __attribute__((noinline)) void
baz()31 baz ()
32 {
33 const A *a = b.b2;
34 unsigned int i;
35 unsigned short n = b.b1;
36 for (i = 0; i < n; ++i)
37 if (a[i].a1 == 11)
38 {
39 if (i > 0 && (a[i - 1].a2 & 1))
40 continue;
41 bar (foo (2));
42 return;
43 }
44 }
45
46 int
main()47 main ()
48 {
49 A a[4] = { { 10, 0, 0 }, { 11, 1, 0 }, { 11, 1, 0 }, { 11, 1, 0 } };
50 b.b1 = 4;
51 b.b2 = a;
52 baz ();
53 return 0;
54 }
55
56