annotate gcc/testsuite/gcc.dg/pr57149.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR tree-optimization/57149 */
kono
parents:
diff changeset
2 /* { dg-do compile } */
kono
parents:
diff changeset
3 /* { dg-options "-Os -Wuninitialized" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 struct A { struct A *a, *b; };
kono
parents:
diff changeset
6 struct D { struct A e; };
kono
parents:
diff changeset
7 struct E { unsigned char f; struct { struct A e; } g; };
kono
parents:
diff changeset
8 struct F { struct E i[32]; };
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 extern int fn0 (void);
kono
parents:
diff changeset
11 extern int fn1 (struct E *, struct D *);
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 static inline __attribute__ ((always_inline)) int
kono
parents:
diff changeset
14 fn2 (const struct A *x)
kono
parents:
diff changeset
15 {
kono
parents:
diff changeset
16 return x->a == x;
kono
parents:
diff changeset
17 }
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 static int
kono
parents:
diff changeset
20 fn3 (struct E *x)
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 struct D *l, *m;
kono
parents:
diff changeset
23 int retval = retval;
kono
parents:
diff changeset
24 if (fn2 (&x->g.e))
kono
parents:
diff changeset
25 return 0;
kono
parents:
diff changeset
26 for (l = (struct D *) x->g.e.a, m = (struct D *) l->e.a;
kono
parents:
diff changeset
27 &l->e != &x->g.e;
kono
parents:
diff changeset
28 l = m, m = (struct D *) m->e.a)
kono
parents:
diff changeset
29 retval = fn1 (x, l);
kono
parents:
diff changeset
30 return retval;
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 void
kono
parents:
diff changeset
34 fn4 (struct F *x, unsigned k)
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 unsigned i;
kono
parents:
diff changeset
37 for (i = 0; i < k; i++)
kono
parents:
diff changeset
38 {
kono
parents:
diff changeset
39 struct E *y = &x->i[i];
kono
parents:
diff changeset
40 int err = -22;
kono
parents:
diff changeset
41 err = fn3 (y);
kono
parents:
diff changeset
42 if (y->f == 0)
kono
parents:
diff changeset
43 {
kono
parents:
diff changeset
44 if (err > 0)
kono
parents:
diff changeset
45 err = fn0 ();
kono
parents:
diff changeset
46 if (err < 0) /* { dg-bogus "may be used uninitialized in this function" } */
kono
parents:
diff changeset
47 fn0 ();
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49 }
kono
parents:
diff changeset
50 }