1 /* https://bugzilla.redhat.com/show_bug.cgi?id=521991#c5
2
3 Distilled from Linux XFS source code. foo, inlined into bar, ends
4 up with debug stmts referencing the addressable variable b.
5 Optimization made it non-addressable, and then completely optimized
6 away, before we got a chance to rename (and discard) the occurrence
7 in the debug stmt. When we did, we crashed, attempting to rename
8 an unreference variable. */
9
10 /* { dg-do compile } */
11
12 static inline int
foo(void * x,unsigned y)13 foo (void *x, unsigned y)
14 {
15 unsigned z = *(unsigned long *) x % y;
16 *(unsigned long *) x = *(unsigned long *) x / y;
17 return z;
18 }
19
20 struct S
21 {
22 unsigned t;
23 };
24
25 void
bar(struct S * x,int * y)26 bar (struct S *x, int *y)
27 {
28 int a = 0;
29 unsigned long b = x->t;
30 foo (&b, x->t);
31 for (;; a++)
32 if (b)
33 *y = 1;
34 }
35