// RUN: %clang_cc1 -fsyntax-only -verify %s

// Clang used to crash trying to recover while adding 'this->' before Work(x);

template <typename> struct A {
  static void Work(int);  // expected-note{{must qualify identifier}}
};

template <typename T> struct B : public A<T> {
  template <typename T2> B(T2 x) {
    Work(x);  // expected-error{{use of undeclared identifier}}
  }
};

void Test() {
  B<int> b(0);  // expected-note{{in instantiation of function template}}
}


// Don't crash here.
namespace PR16134 {
  template <class P> struct S // expected-error {{expected ';'}}
  template <> static S<Q>::f() // expected-error +{{}}
}

// RUN: %clang_cc1 -fsyntax-only -verify %s

// Clang used to crash trying to recover while adding 'this->' before Work(x);

template <typename> struct A {
  static void Work(int);  // expected-note{{must qualify identifier}}
};

template <typename T> struct B : public A<T> {
  template <typename T2> B(T2 x) {
    Work(x);  // expected-error{{use of undeclared identifier}}
  }
};

void Test() {
  B<int> b(0);  // expected-note{{in instantiation of function template}}
}


--- 
+++ 
@@ -16,3 +16,9 @@
   B<int> b(0);  // expected-note{{in instantiation of function template}}
 }
 
+
+// Don't crash here.
+namespace PR16134 {
+  template <class P> struct S // expected-error {{expected ';'}}
+  template <> static S<Q>::f() // expected-error +{{}}
+}
Add testcase for PR16134, which no longer crashes with ToT.


git-svn-id: ffe668792ed300d6c2daa1f6eba2e0aa28d7ec6c@186849 91177308-0d34-0410-b5e6-96231b3b80d8
