annotate gcc/testsuite/g++.dg/pr84821.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-options "-O2" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 // { dg-additional-options "-fPIC" { target fpic } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 typedef struct a *b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 struct a {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 int c;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 unsigned d[];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 int e, f, g, i, l, m;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 struct o {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 long *h;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 int c;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 unsigned j;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 int k;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 long aa;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 inline void p(o *r) { r->c = g; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 int *n, *ab;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 inline bool s(o *r) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 for (; r->aa == 0; r->aa = r->h[r->j])
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 if (r->j >= r->c)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 return false;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 r->aa >>= 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 for (; r->aa;)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 r++;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 *n = r->k;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 return true;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 class t {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 public:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 t(int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 operator b() { return q; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 b q;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 bool u, v, ac;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 void fn3() {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 long w, x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 o ad;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 bool ae;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 t af(i), ag(i);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 for (p(&ad); s(&ad);) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 a *ah = af, *ai = ah, *aj = ag;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 x = ai->d[e] >> f & 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 ae = x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 ai = aj;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 w = ai->d[e] >> f & 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 ac = w;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 if (v && u && w && x)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 ab[l] = ++m;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 u = x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 for (;;)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 ;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 }