// RUN: %clang_cc1 -fsyntax-only -verify %s
template<typename T>
struct S {
 S() { }
};

template<typename T>
struct vector {
  void push_back(const T&) { int a[sizeof(T) ? -1: -1]; } // expected-error {{array size is negative}}
};

class GRExprEngine {
public:
 typedef vector<S<void *> >CheckersOrdered;
 CheckersOrdered Checkers;

 template <typename CHECKER>
 void registerCheck(CHECKER *check) {
   Checkers.push_back(S<void *>()); // expected-note {{in instantiation of member function 'vector<S<void *> >::push_back' requested here}}
 }
};

class RetainReleaseChecker { };

void f(GRExprEngine& Eng) {
   Eng.registerCheck(new RetainReleaseChecker); // expected-note {{in instantiation of function template specialization 'GRExprEngine::registerCheck<RetainReleaseChecker>' requested here}}
}

// PR 5838
namespace test1 {
  template<typename T> struct A {
    int a;
  };

  template<typename T> struct B : A<float>, A<T> {
    void f() {
      a = 0; // should not be ambiguous
    }
  };
  template struct B<int>;

  struct O {
    int a;
    template<typename T> struct B : A<T> {
      void f() {
        a = 0; // expected-error {{'test1::O::a' is not a member of class 'test1::O::B<int>'}}
      }
    };
  };
  template struct O::B<int>; // expected-note {{in instantiation}}
}
