summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2013-06-06 23:43:20 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2013-06-06 23:43:20 +0000
commit585bee48bac063f31696e308798f9432b5ba4116 (patch)
tree978be0b7826d0d5c657cd1063cb61011efb01c45 /test
parent57c8736e7dce5e63b4e1665d2c4fcf6e6ef959d0 (diff)
downloadclang-585bee48bac063f31696e308798f9432b5ba4116.tar.gz
Implement DR7
Disallowing deriving from classes that have private virtual base classes except in instances where the deriving class would be able to cast itself to the private virtual base via a different derivation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183462 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CXX/drs/dr0xx.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/test/CXX/drs/dr0xx.cpp b/test/CXX/drs/dr0xx.cpp
index 4298960426..7ff199d0b1 100644
--- a/test/CXX/drs/dr0xx.cpp
+++ b/test/CXX/drs/dr0xx.cpp
@@ -59,10 +59,13 @@ namespace dr5 { // dr5: yes
const C c = e;
}
-namespace dr7 { // dr7: no
+namespace dr7 { // dr7: yes
class A { public: ~A(); };
- class B : virtual private A {};
- class C : public B {} c; // FIXME: should be rejected, ~A is inaccessible
+ class B : virtual private A {}; // expected-note 2 {{declared private here}}
+ class C : public B {} c; // expected-error 2 {{inherited virtual base class 'dr7::A' has private destructor}} \
+ // expected-note {{implicit default constructor for 'dr7::C' first required here}} \
+ // expected-note {{implicit default destructor for 'dr7::C' first required here}}
+ class VeryDerivedC : public B, virtual public A {} vdc;
class X { ~X(); }; // expected-note {{here}}
class Y : X { ~Y() {} }; // expected-error {{private destructor}}