1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3// Clang used to crash trying to recover while adding 'this->' before Work(x);
4
5template <typename> struct A {
6  static void Work(int);  // expected-note{{must qualify identifier}}
7};
8
9template <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
15void Test() {
16  B<int> b(0);  // expected-note{{in instantiation of function template}}
17}
18
19
20// Don't crash here.
21namespace PR16134 {
22  template <class P> struct S // expected-error {{expected ';'}}
23  template <> static S<Q>::f() // expected-error +{{}}
24}
25
26namespace 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