diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CXX/class.access/p4.cpp | 20 | ||||
| -rw-r--r-- | clang/test/SemaCXX/default-assignment-operator.cpp | 13 | ||||
| -rw-r--r-- | clang/test/SemaTemplate/virtual-member-functions.cpp | 23 |
3 files changed, 43 insertions, 13 deletions
diff --git a/clang/test/CXX/class.access/p4.cpp b/clang/test/CXX/class.access/p4.cpp index 1cd89661367..e8afbe7a392 100644 --- a/clang/test/CXX/class.access/p4.cpp +++ b/clang/test/CXX/class.access/p4.cpp @@ -97,7 +97,7 @@ namespace test2 { A A::foo; // okay class B : A { }; // expected-error {{base class 'test2::A' has private constructor}} - B b; + B b; // expected-note{{implicit default constructor}} class C : virtual A { public: @@ -105,7 +105,7 @@ namespace test2 { }; class D : C { }; // expected-error {{inherited virtual base class 'test2::A' has private constructor}} - D d; + D d; // expected-note{{implicit default constructor}} } // Implicit destructor calls. @@ -143,13 +143,15 @@ namespace test3 { }; class Derived3 : // expected-error 2 {{inherited virtual base class 'Base<2>' has private destructor}} \ - // expected-error 2 {{inherited virtual base class 'Base<3>' has private destructor}} + // expected-error 2 {{inherited virtual base class 'Base<3>' has private destructor}} \ + // expected-note 2{{implicit default constructor}} Base<0>, // expected-error 2 {{base class 'Base<0>' has private destructor}} virtual Base<1>, // expected-error 2 {{base class 'Base<1>' has private destructor}} Base2, // expected-error 2 {{base class 'test3::Base2' has private destructor}} virtual Base3 - {}; - Derived3 d3; + {}; + Derived3 d3; // expected-note {{implicit default constructor}}\ + // expected-note{{implicit default destructor}}} } // Conversion functions. @@ -205,13 +207,13 @@ namespace test5 { class Test1 { A a; }; // expected-error {{private member}} void test1() { Test1 a; - a = Test1(); + a = Test1(); // expected-note{{implicit default copy}} } class Test2 : A {}; // expected-error {{private member}} void test2() { Test2 a; - a = Test2(); + a = Test2(); // expected-note{{implicit default copy}} } } @@ -224,12 +226,12 @@ namespace test6 { class Test1 { A a; }; // expected-error {{field of type 'test6::A' has private copy constructor}} void test1(const Test1 &t) { - Test1 a = t; + Test1 a = t; // expected-note{{implicit default copy}} } class Test2 : A {}; // expected-error {{base class 'test6::A' has private copy constructor}} void test2(const Test2 &t) { - Test2 a = t; + Test2 a = t; // expected-note{{implicit default copy}} } } diff --git a/clang/test/SemaCXX/default-assignment-operator.cpp b/clang/test/SemaCXX/default-assignment-operator.cpp index 4b5531e0c87..0be5df39b15 100644 --- a/clang/test/SemaCXX/default-assignment-operator.cpp +++ b/clang/test/SemaCXX/default-assignment-operator.cpp @@ -7,7 +7,8 @@ class Base { // expected-error {{cannot define the implicit default assignment o }; class X : Base { // // expected-error {{cannot define the implicit default assignment operator for 'X', because non-static const member 'cint' can't use default assignment operator}} \ -// expected-note{{assignment operator for 'Base' first required here}} +// expected-note{{assignment operator for 'Base' first required here}} \ + // expected-note{{implicit default copy assignment operator}} public: X(); const int cint; // expected-note {{declared here}} @@ -28,7 +29,8 @@ Z z2; // Test1 void f(X x, const X cx) { - x = cx; // expected-note{{assignment operator for 'X' first required here}} + x = cx; // expected-note{{assignment operator for 'X' first required here}} \ + // expected-note{{implicit default copy assignment operator}} x = cx; z1 = z2; } @@ -84,7 +86,9 @@ public: E1 e1, e2; void j() { - e1 = e2; // expected-note{{assignment operator for 'E1' first required here}} + // FIXME: duplicated! + e1 = e2; // expected-note{{assignment operator for 'E1' first required here}} \ + // expected-note{{implicit default copy assignment operator}} } namespace ProtectedCheck { @@ -101,7 +105,8 @@ namespace ProtectedCheck { X x; }; - void f(Z z) { z = z; } // + void f(Z z) { z = z; } // expected-note{{implicit default copy assignment operator}} + } namespace MultiplePaths { diff --git a/clang/test/SemaTemplate/virtual-member-functions.cpp b/clang/test/SemaTemplate/virtual-member-functions.cpp index 59df3c22aa1..9ef1849bce6 100644 --- a/clang/test/SemaTemplate/virtual-member-functions.cpp +++ b/clang/test/SemaTemplate/virtual-member-functions.cpp @@ -53,3 +53,26 @@ T *HasOutOfLineKey<T>::f(float *fp) { } HasOutOfLineKey<int> out_of_line; + +namespace std { + class type_info; +} + +namespace PR7114 { + class A { virtual ~A(); }; // expected-note{{declared private here}} + + template<typename T> + class B { + public: + class Inner : public A { }; // expected-error{{base class 'PR7114::A' has private destructor}} + static Inner i; + static const unsigned value = sizeof(i) == 4; + }; + + int f() { return B<int>::value; } + + void test_typeid(B<float>::Inner bfi) { + (void)typeid(bfi); // expected-note{{implicit default destructor}} + } +} + |

