1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
3
4 /* Test derived from PR 14643. When a function has no addressable
5 variables but 2 or more pointers have conflicting memory tags, they
6 were not being processed by the type based alias analyzer,
7 resulting in optimizations removing a non-redundant load. */
8
9 extern void abort (void);
10
11 struct bar { int count; int *arr;};
12
foo(struct bar * b)13 void foo (struct bar *b)
14 {
15 b->count = 0;
16 *(b->arr) = 2;
17 if (b->count == 0) /* b->count can't be assumed to be 0 here. */
18 abort ();
19 }
20
21 int
main()22 main ()
23 {
24 struct bar x;
25 x.arr = &x.count;
26 foo (&x);
27 return 0;
28 }
29