summaryrefslogtreecommitdiff
path: root/test/SemaCXX/vtable-instantiation.cpp
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2014-12-22 18:13:07 +0000
committerNico Weber <nicolasweber@gmx.de>2014-12-22 18:13:07 +0000
commit4534f0e6c7c3d1dc7a59c9ff3fccced7abbd538c (patch)
tree30ddb64238033ec767680354d0e8a78b8a5d20c3 /test/SemaCXX/vtable-instantiation.cpp
parent31523df79ae46ecb4fd7ae26c6e669a761a0982a (diff)
downloadclang-4534f0e6c7c3d1dc7a59c9ff3fccced7abbd538c.tar.gz
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.) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224718 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX/vtable-instantiation.cpp')
-rw-r--r--test/SemaCXX/vtable-instantiation.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/test/SemaCXX/vtable-instantiation.cpp b/test/SemaCXX/vtable-instantiation.cpp
new file mode 100644
index 0000000000..78f2b3ed1a
--- /dev/null
+++ b/test/SemaCXX/vtable-instantiation.cpp
@@ -0,0 +1,68 @@
+// 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}}
+ }
+}