2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / opt / nrv13.C
blobbb49a3a6e4f8d53f3fc0f2c70f38ee0e0ee9a5ec
1 // PR tree-optimization/32353
2 // { dg-do run }
3 // { dg-options "-O2" }
5 extern "C" void abort ();
7 struct A
9   int f;
10   A (int x) : f (x) {}
14 foo (const A &x, const A &y)
16   A r (0);
17   r = x.f == -111 ? y : (y.f == -111 || x.f > y.f) ? x : y;
18   A s (0);
19   r = r.f == -111 ? s : (r.f > s.f) ? r : s;
20   return r;
23 int
24 main ()
26   if (foo (A (0), A (1)).f != 1)
27     abort ();
28   if (foo (A (1), A (9)).f != 9)
29     abort ();
30   if (foo (A (9), A (1)).f != 9)
31     abort ();
32   if (foo (A (-4), A (-5)).f != 0)
33     abort ();
34   if (foo (A (-111), A (-111)).f != 0)
35     abort ();
36   if (foo (A (2), A (-111)).f != 2)
37     abort ();
38   if (foo (A (-111), A (6)).f != 6)
39     abort ();
40   if (foo (A (-111), A (-4)).f != 0)
41     abort ();