annotate gcc/testsuite/g++.dg/opt/pr52727.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 // { dg-do compile }
kono
parents:
diff changeset
2 // { dg-options "-g -Os" }
kono
parents:
diff changeset
3 // { dg-additional-options "-march=i686" { target ia32 } }
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 int grow (int);
kono
parents:
diff changeset
6 void fn (int);
kono
parents:
diff changeset
7 struct A { int a1, a2; };
kono
parents:
diff changeset
8 template <typename T>
kono
parents:
diff changeset
9 struct B
kono
parents:
diff changeset
10 {
kono
parents:
diff changeset
11 A *b;
kono
parents:
diff changeset
12 ~B () { b3 (b); }
kono
parents:
diff changeset
13 void b1 (int);
kono
parents:
diff changeset
14 void b2 (int);
kono
parents:
diff changeset
15 void b3 (A *);
kono
parents:
diff changeset
16 };
kono
parents:
diff changeset
17 struct C { int c1, c2, c3; bool c4; };
kono
parents:
diff changeset
18 int
kono
parents:
diff changeset
19 bar (int x)
kono
parents:
diff changeset
20 {
kono
parents:
diff changeset
21 int y = x / 6;
kono
parents:
diff changeset
22 if (y > x / 2)
kono
parents:
diff changeset
23 return y;
kono
parents:
diff changeset
24 return 0;
kono
parents:
diff changeset
25 }
kono
parents:
diff changeset
26 void baz (double, double);
kono
parents:
diff changeset
27 void
kono
parents:
diff changeset
28 foo (const C *x, int y, int z)
kono
parents:
diff changeset
29 {
kono
parents:
diff changeset
30 B<int> p;
kono
parents:
diff changeset
31 double r = y / 2;
kono
parents:
diff changeset
32 int w = bar (int (r));
kono
parents:
diff changeset
33 double s = y / 2 + 0.5;
kono
parents:
diff changeset
34 double t = z / 2 + 0.5;
kono
parents:
diff changeset
35 int u = x->c3;
kono
parents:
diff changeset
36 int v = (x->c2 + u - 1 - x->c1) / u;
kono
parents:
diff changeset
37 p.b2 ((2 * v > p.b->a1 || (2 * v < p.b->a2 && 2 * v < (p.b->a1 >> 1)))
kono
parents:
diff changeset
38 ? grow (0) : p.b->a1);
kono
parents:
diff changeset
39 for (int i = 0; i <= v; ++i)
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 double l = x->c4 ? 4.5 - i * 6.2 / v : (3.1 - i * 31 / v) / 6;
kono
parents:
diff changeset
42 baz (s + (r - w) * l, t - (r - w) * l);
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44 }
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46