| // PR target/85503 |
| // { dg-do compile { target { { powerpc64le-*-* } && c++11 } } } |
| // { dg-require-effective-target powerpc_vsx_ok } |
| // { dg-options "-O2 -mvsx" } |
| |
| namespace b { |
| template < int c > struct d { static constexpr int e = c; }; |
| typedef d< false > f; |
| template < typename g > struct h { typedef g i; }; |
| template < typename > class j; |
| template < bool, bool, typename... > struct aa; |
| struct k { |
| template < typename n, typename... q > |
| static h< decltype(n()(q()...)) > o(int); |
| }; |
| template < typename p, typename... t > struct aa< false, false, p, t... > : k { |
| typedef decltype(o< p, t... >(0)) i; |
| }; |
| template < typename p, typename... t > |
| struct ab : aa< f::e, f::e, p, t... >::i {}; |
| template < typename p, typename... t > struct j< p(t...) > : ab< p, t... > {}; |
| } enum { r, s }; |
| typedef long x; |
| template < typename > struct ac; |
| template < typename y > struct ac< y & > { typedef y i; }; |
| template < typename y > struct j { typedef typename b::j< y >::i i; }; |
| template < typename > struct ad; |
| template < typename > struct ae; |
| template < typename > class af; |
| template < typename, int ag, int ah, int = 0, int = ag, int = ah > class ai; |
| template < typename > class aj; |
| template < typename, typename, typename > class ak; |
| template < typename > class al; |
| template < typename > struct am; |
| template < typename > struct an; |
| template < typename y > struct ao { typedef typename am< y >::i i; }; |
| struct aq { |
| typedef const ai< double, 2, 1 > &ar; |
| }; |
| template < typename as > struct at { typedef aj< as > i; }; |
| template < typename as > struct au { typedef typename at< as >::i i; }; |
| template < typename av > av aw(const typename an< av >::i *); |
| template < typename av, int > av az(const typename an< av >::i *ba) { |
| return aw< av >(ba); |
| } |
| typedef __attribute__((altivec(vector__))) double bb; |
| template <> struct am< double > { typedef bb i; }; |
| template <> struct an< bb > { typedef double i; }; |
| template <> bb aw(const double *ba) { return __builtin_vec_vsx_ld(0, ba); } |
| struct bc { |
| template < typename av > int bd(av a) { bd(a); __builtin_unreachable (); } |
| }; |
| struct be { |
| double operator()(const int, const int); |
| }; |
| template < typename as > class bf : public ae< as > { |
| public: |
| typedef typename ad< as >::bg bg; |
| using ae< as >::bh; |
| enum { bi }; |
| bg bj() const; |
| template < typename bk > bg bl(const bk &) const; |
| }; |
| template < typename as > class aj : public bf< as > { |
| public: |
| using bf< as >::bh; |
| template < typename bm > ak< be, const as, const bm > operator-(bm bn) { |
| return ak< be, const as, const bm >(bh(), bn); |
| } |
| int bo() const; |
| al< as > array() { return bh(); } |
| }; |
| template < typename as > struct ae { |
| const as &bh() const { return *static_cast< const as * >(this); } |
| }; |
| template < typename > struct bp; |
| template < typename > struct bq; |
| template < typename y > struct br : bq< y > { |
| br(y bs) : bq< y >(bs) {} |
| }; |
| template < typename y > struct br< const y > : br< y > { |
| br(const y &bs) : br< y >(bs) {} |
| }; |
| template < typename as > struct br< af< as > > { |
| typedef as bt; |
| br(const bt &m) : bu(m.bv()) {} |
| template < int bw, typename ay > ay bx(x, x by) { |
| return az< ay, bw >(bu + by); |
| } |
| const typename bt::bg *bu; |
| }; |
| template < typename bg, int u, int bz, int ca, int cb, int cc > |
| struct br< ai< bg, u, bz, ca, cb, cc > > : br< af< ai< bg, u, bz > > > { |
| typedef ai< bg, u, bz > cd; |
| br(const cd &m) : br< af< cd > >(m) {} |
| }; |
| template < typename bk, typename ce, typename cf > |
| struct br< ak< bk, ce, cf > > : bp< ak< bk, ce, cf > > { |
| br(ak< bk, ce, cf > bs) : bp< ak< bk, ce, cf > >(bs) {} |
| }; |
| template < typename bk, typename ce, typename cf > |
| struct bp< ak< bk, ce, cf > > { |
| bp(ak< bk, ce, cf > bs) : cg(), ch(bs.ci()) {} |
| template < int bw, typename ay > ay bx(x cj, x by) { |
| return ch.template bx< bw, ay >(cj, by); |
| } |
| ce cg; |
| br< cf > ch; |
| }; |
| template < typename cd > struct v { |
| typedef typename ac< typename cd::ck >::i cl; |
| v(cl &arg) : cn(arg) {} |
| template < int bw, typename ay > ay bx(x cj, x by) { |
| return cn.template bx< bw, ay >(cj, by); |
| } |
| br< cl > cn; |
| }; |
| template < typename cm > struct bq< al< cm > > : v< al< cm > > { |
| bq(al< cm > w) : v< al< cm > >(w.dd()) {} |
| }; |
| template < typename as > class ap : public bf< as > {}; |
| template < int ax > struct co { double array[ax]; }; |
| template < int ax > class cq { |
| co< ax > bu; |
| |
| public: |
| const double *bv() const { return bu.array; } |
| }; |
| template < typename as > class af : public at< as >::i { |
| public: |
| typedef typename at< as >::i cp; |
| cq< cp::bi > cs; |
| const typename ad< as >::bg *bv() const { return cs.bv(); } |
| }; |
| template < typename cr, int ag, int ah, int cu, int ct, int cw > |
| struct ad< ai< cr, ag, ah, cu, ct, cw > > { |
| typedef cr bg; |
| }; |
| template < typename, int ag, int ah, int, int, int > |
| class ai : public af< ai< double, ag, ah > > { |
| public: |
| typedef ai cv; |
| }; |
| template < typename bk, typename ce, typename cf > |
| struct ad< ak< bk, ce, cf > > { |
| typedef typename j< bk(typename ce::bg, typename cf::bg) >::i bg; |
| }; |
| template < typename, typename, typename > class z; |
| template < typename bk, typename cy, typename cx > |
| class ak : public z< bk, cy, cx > { |
| public: |
| typedef cx RhsNested; |
| ak(cy, cx cz) : da(), db(cz) {} |
| RhsNested ci() { return db; } |
| cy da; |
| RhsNested db; |
| }; |
| template < typename bk, typename ce, typename cf > |
| class z : public au< ak< bk, ce, cf > >::i {}; |
| template < typename as > int aj< as >::bo() const { (*this).bj(); __builtin_unreachable (); } |
| template < typename as > struct dc { |
| typedef typename ao< typename as::bg >::i ay; |
| enum { d, de }; |
| enum { df = de }; |
| }; |
| template < typename as > struct dk { |
| enum { dh, di, dj, alignment }; |
| typedef typename dc< as >::ay PacketScalar; |
| static PacketScalar dl(as dm, bc) { |
| return dm.template dn< alignment, PacketScalar >(di, dj); |
| } |
| }; |
| template < typename, typename as, int = dc< as >::df > struct redux_impl; |
| template < typename Func, typename as > struct redux_impl< Func, as, s > { |
| static int dl(as dm, Func func) { func.bd(dk< as >::dl(dm, func)); __builtin_unreachable (); } |
| }; |
| template < typename _XprType > class redux_evaluator { |
| public: |
| typedef _XprType cd; |
| redux_evaluator(cd bs) : m_evaluator(bs), m_xpr(bs) {} |
| typedef typename cd::bg bg; |
| template < int bw, typename ay > ay dn(x di, x dj) { |
| return m_evaluator.template bx< bw, ay >(dj, di); |
| } |
| br< cd > m_evaluator; |
| cd m_xpr; |
| }; |
| template < typename as > |
| template < typename Func > |
| typename ad< as >::bg bf< as >::bl(const Func &func) const { |
| typedef redux_evaluator< as > ThisEvaluator; |
| ThisEvaluator thisEval(bh()); |
| redux_impl< Func, ThisEvaluator >::dl(thisEval, func); |
| __builtin_unreachable (); |
| } |
| template < typename as > typename ad< as >::bg bf< as >::bj() const { |
| bl(bc()); |
| __builtin_unreachable (); |
| } |
| template < typename ExpressionType > |
| struct ad< al< ExpressionType > > : ad< typename ExpressionType::cv > {}; |
| template < typename > class al : public ap< al< ai< double, 2, 1 > > > { |
| public: |
| typedef aq::ar ck; |
| al(const ai< double, 2, 1 > &dg) : m_expression(dg) {} |
| const ai< double, 2, 1 > &dd() { return m_expression; } |
| ck m_expression; |
| }; |
| typedef ai< double, 2, 1 > Vector2d; |
| class OnHoverHandlerGraphicsItem { |
| public: |
| static Vector2d corners; |
| }; |
| int |
| GasGraphicsItemcreateOnHoverHandler() { |
| Vector2d l; |
| (l - OnHoverHandlerGraphicsItem::corners.array()).bo(); |
| __builtin_unreachable (); |
| } |