1*c87b03e5Sespie /* Verify that sched re-inserts needed scopes properly. */ 2*c87b03e5Sespie /* { dg-do compile } */ 3*c87b03e5Sespie /* { dg-options "-mcpu=ev5" { target alpha*-*-* } } */ 4*c87b03e5Sespie 5*c87b03e5Sespie template <class T> foo()6*c87b03e5Sespieinline void foo() 7*c87b03e5Sespie { 8*c87b03e5Sespie void (T::*x)() __attribute__ ((__unused__)) = &T::bar; 9*c87b03e5Sespie } 10*c87b03e5Sespie 11*c87b03e5Sespie template <class T> 12*c87b03e5Sespie struct D 13*c87b03e5Sespie { barD14*c87b03e5Sespie void bar() { 15*c87b03e5Sespie } 16*c87b03e5Sespie T i; 17*c87b03e5Sespie }; 18*c87b03e5Sespie 19*c87b03e5Sespie template <class T> 20*c87b03e5Sespie struct E 21*c87b03e5Sespie { barE22*c87b03e5Sespie void bar() { 23*c87b03e5Sespie foo <D<T> > (); 24*c87b03e5Sespie *i-- = *i; 25*c87b03e5Sespie } 26*c87b03e5Sespie T i; 27*c87b03e5Sespie }; 28*c87b03e5Sespie 29*c87b03e5Sespie struct A {}; 30*c87b03e5Sespie template<typename T> struct B { typedef typename T::t t; }; 31*c87b03e5Sespie template<typename T> struct B<T*> { typedef T& t; }; 32*c87b03e5Sespie template<typename T> 33*c87b03e5Sespie struct C 34*c87b03e5Sespie { 35*c87b03e5Sespie T b; 36*c87b03e5Sespie explicit C (const T& i) : b (i) { } 37*c87b03e5Sespie typename B<T>::t operator* () const { return *b; } 38*c87b03e5Sespie C operator-- (int) { return C (b--); } 39*c87b03e5Sespie }; 40*c87b03e5Sespie 41*c87b03e5Sespie template void foo <E<C<A**> > > (); 42*c87b03e5Sespie template void foo <D<C<A**> > > (); 43