Home | History | Annotate | Download | only in SemaTemplate
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 // Clang used to crash trying to recover while adding 'this->' before Work(x);
      4 
      5 template <typename> struct A {
      6   static void Work(int);  // expected-note{{must qualify identifier}}
      7 };
      8 
      9 template <typename T> struct B : public A<T> {
     10   template <typename T2> B(T2 x) {
     11     Work(x);  // expected-error{{use of undeclared identifier}}
     12   }
     13 };
     14 
     15 void Test() {
     16   B<int> b(0);  // expected-note{{in instantiation of function template}}
     17 }
     18 
     19 
     20 // Don't crash here.
     21 namespace PR16134 {
     22   template <class P> struct S // expected-error {{expected ';'}}
     23   template <> static S<Q>::f() // expected-error +{{}}
     24 }
     25 
     26 namespace PR16225 {
     27   template <typename T> void f();
     28   template<typename C> void g(C*) {
     29     struct LocalStruct : UnknownBase<Mumble, C> { };  // expected-error {{unknown template name 'UnknownBase'}} \
     30                                                       // expected-error {{use of undeclared identifier 'Mumble'}}
     31     f<LocalStruct>();  // expected-warning {{template argument uses local type 'LocalStruct'}}
     32   }
     33   struct S;
     34   void h() {
     35     g<S>(0);  // expected-note {{in instantiation of function template specialization}}
     36   }
     37 }
     38