llvm-project/clang/test/SemaCXX/vtable-instantiation.cpp
Nico Weber 08ef80f4b8 Rename test.cc files to test.cpp.
The lit.cfg files only add .cpp to suffixes, so these tests used to never run,
oops.  (Also tweak to of these tests in minor ways to make the actually pass.)

llvm-svn: 224718
2014-12-22 18:13:07 +00:00

69 lines
1.5 KiB
C++

// RUN: %clang_cc1 -fsyntax-only -verify %s
namespace PR8640 {
template<class T1> struct C1 {
virtual void c1() {
T1 t1 = 3; // expected-error {{cannot initialize a variable}}
}
};
template<class T2> struct C2 {
void c2() {
new C1<T2>(); // expected-note {{in instantiation of member function}}
}
};
void f() {
C2<int*> c2;
c2.c2(); // expected-note {{in instantiation of member function}}
}
}
namespace PR9325 {
template<typename T>
class Target
{
public:
virtual T Value() const
{
return 1; // expected-error{{cannot initialize return object of type 'int *' with an rvalue of type 'int'}}
}
};
template<typename T>
struct Provider
{
static Target<T> Instance;
};
template<typename T>
Target<T> Provider<T>::Instance; // expected-note{{in instantiation of}}
void f()
{
Target<int*>* traits = &Provider<int*>::Instance; // expected-note{{requested here}}
}
}
namespace PR10020 {
struct MG {
virtual void Accept(int) = 0;
};
template <typename Type>
struct GMG : MG {
void Accept(int i) {
static_cast<Type *>(0)->Accept(i); // expected-error{{member reference base}}
}
static GMG* Method() { return &singleton; } // expected-note{{in instantiation of}}
static GMG singleton;
};
template <typename Type>
GMG<Type> GMG<Type>::singleton; // expected-note{{requested here}}
void test(void) {
GMG<int>::Method(); // expected-note{{in instantiation of}}
}
}