1 /* { dg-do run } */
2 /* { dg-options "-O2 -fno-tree-fre -fno-tree-sra -fdump-tree-optimized-slim"  } */
3 
4 struct S
5 {
6   int a, b, c;
7 };
8 
9 volatile int z1;
10 int z2 = 44;
11 
12 void  __attribute__((noipa))
use_int(int c)13 use_int (int c)
14 {
15   z1 = c;
16 }
17 
18 static void __attribute__ ((noinline))
bar(struct S s)19 bar (struct S s)
20 {
21   use_int (s.c);
22 }
23 
24 
25 static void __attribute__ ((noinline))
foo(struct S s)26 foo (struct S s)
27 {
28   int c = s.c;
29   if (c != 21)
30     use_int (c);
31 
32   s.c = z2;
33   bar (s);
34   if (s.c != 44)
35     __builtin_abort ();
36 }
37 
38 int
main(void)39 main (void)
40 {
41   struct S s;
42   s.a = 1;
43   s.b = 64;
44   s.c = 21;
45   foo (s);
46   return 0;
47 }
48 
49 
50 
51 
52 /* { dg-final { scan-tree-dump-not "ellide" "optimized" } } */
53