view gcc/testsuite/g++.dg/ipa/pr85421.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
line wrap: on
line source

// { dg-do compile }
// { dg-options "-O3 -std=gnu++1y -w" }

namespace {
template <typename b> b c(b);
template <typename d, typename, template <typename> class> struct f {
  using g = d;
};
template <typename d, template <typename> class aa> using h = f<d, void, aa>;
template <typename d, template <typename> class aa>
using i = typename h<d, aa>::g;
template <typename b> struct j { typedef b k; };
} // namespace
namespace l {
template <typename b> class m {
public:
  typedef b k;
};
} // namespace l
namespace a {
template <typename b> using n = l::m<b>;
template <typename b> class ac : public n<b> {};
struct s {
  template <typename b> using ad = typename b::e;
};
template <typename o> struct p : s {
  typedef typename o::k k;
  using ag = i<k *, ad>;
};
} // namespace a
namespace l {
template <typename o> struct t : a::p<o> {};
} // namespace l
namespace a {
template <bool> struct al {
  template <typename am> static void an(am ao, am) { c(*ao); }
};
template <typename am> void aq(am ao, am ap) {
  typedef typename j<am>::k ar;
  al<__has_trivial_destructor(ar)>::an(ao, ap);
}
namespace {
typedef char au;
}
} // namespace a
typedef char av;
typedef int aw;
typedef av ay;
typedef aw az;
namespace a {
template <typename, typename o> struct ba {
  typedef typename l::t<o>::ag ag;
  struct {
    ag bb;
    ag bc;
  } bd;
};
template <typename b, typename o = ac<b>> class be : ba<b, o> {
  typedef ba<b, o> bf;
  typedef typename bf::ag ag;

public:
  void bh() { bi(this->bd.bb); }
  void bi(ag bj) { aq(bj, this->bd.bc); }
};
} // namespace a
namespace bk {
enum bl {};
enum bn { bo };
class q {
public:
  static a::au bp(bn);
  static bool bq(a::au *br, bn g) { return bs(br, g); }
  static bl bs(a::au *br, bn g) {
    if (br) {
      auto bt = bp(g);
      if (bt)
        return bl();
    }
  }
};
template <typename, typename> class bu {};
} // namespace bk
namespace bv {
namespace bw {
class bx;
}
} // namespace bv
namespace bk {
enum by { bz };
struct ca;
class cb {
public:
  class cc {
  public:
    virtual void cd(by) = 0;
  };
  virtual bu<ca, by> e();
  cc *cf;
};
class cg {
public:
  ~cg() { q::bq(ch, bo); }
  a::au *ch;
};
class ci {
  cg cj;
};
namespace ck {
enum cl : ay;
}
class r : ci {};
class cn {
public:
  ck::cl co();
};
by cp(ck::cl);
class cq : cb, cb::cc {
  bu<ca, by> ce(bv::bw::bx &, az) noexcept;
  void cd(by);
  void cr(bv::bw::bx &, az, cb::cc *) noexcept;
  cn cs;
  a::be<r> ct;
};
} // namespace bk
using bv::bw::bx;
namespace bk {
bu<ca, by> cq::ce(bx &, az) noexcept { ct.bh(); }
void cq::cr(bx &, az, cb::cc *) noexcept { cd(bz); }
void cq::cd(by) { cf->cd(cp(cs.co())); }
} // namespace bk