1/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ 2/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ 3/* { dg-require-effective-target powerpc_p8vector_ok } */ 4/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ 5/* { dg-options "-mcpu=power7 -mtune=power8 -O3 -w" } */ 6 7/* target/67211, compiler got a 'insn does not satisfy its constraints' error. */ 8 9template <typename _InputIterator, typename _ForwardIterator> 10void find_first_of(_InputIterator, _InputIterator, _ForwardIterator p3, 11 _ForwardIterator p4) { 12 for (; p3 != p4; ++p3) 13 ; 14} 15 16template <typename, typename, typename> struct A { 17 int _S_buffer_size; 18 int *_M_cur; 19 int *_M_first; 20 int *_M_last; 21 int **_M_node; 22 void operator++() { 23 if (_M_cur == _M_last) 24 m_fn1(_M_node + 1); 25 } 26 void m_fn1(int **p1) { 27 _M_node = p1; 28 _M_first = *p1; 29 _M_last = _M_first + _S_buffer_size; 30 } 31}; 32 33template <typename _Tp, typename _Ref, typename _Ptr> 34bool operator==(A<_Tp, _Ref, _Ptr>, A<_Tp, _Ref, _Ptr>); 35template <typename _Tp, typename _Ref, typename _Ptr> 36bool operator!=(A<_Tp, _Ref, _Ptr> p1, A<_Tp, _Ref, _Ptr> p2) { 37 return p1 == p2; 38} 39 40class B { 41public: 42 A<int, int, int> m_fn2(); 43}; 44struct { 45 B j; 46} a; 47void Linked() { 48 A<int, int, int> b, c, d; 49 find_first_of(d, c, b, a.j.m_fn2()); 50} 51