2018-10-23 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / tree-ssa / pr81408.C
blob39e32fd4bc982d8e6ea338d8d1acbdfb266225cb
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -std=gnu++11 -fopt-info-loop-missed" } */
3 struct p
5   char *ay;
6 };
8 namespace a {
9 void b () __attribute__ ((__noreturn__));
10 template <typename> struct d;
11 template <typename e> struct d<e *>
13   typedef e f;
15 struct g
17   template <typename h> using i = h *;
20 using a::d;
21 template <typename j, typename> class k
23   j l;
25 public:
26   typename d<j>::f operator* () { return p(); }
27   void operator++ () { ++l; }
28   j
29   aa ()
30   {
31     return l;
32   }
34 template <typename m, typename n, typename ab>
35 bool
36 operator!= (k<m, ab> o, k<n, ab> p2)
38   return o.aa () != p2.aa ();
40 namespace a {
41 struct F
43   struct q
44   {
45     using ai = g::i<p>;
46   };
47   using r = q::ai;
49 class H
51 public:
52   k<F::r, int> begin ();
53   k<F::r, int> end ();
55 int s;
56 class I
58 public:
59   void
60   aq (char)
61   {
62     if (s)
63       b ();
64   }
66 class u : public I
68 public:
69   void
70   operator<< (u o (u))
71   {
72     o (*this);
73   }
74   u operator<< (void *);
76 template <typename at, typename au>
78 av (au o)
80   o.aq ('\n');
81   return at();
83 u ax;
85 a::H t;
86 void
87 ShowHelpListCommands ()
89   for (auto c : t) /* { dg-missed "missed loop optimization: niters analysis .*" } */
90     a::ax << c.ay << a::av;