diff options
author | David Majnemer <david.majnemer@gmail.com> | 2013-06-06 23:43:20 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2013-06-06 23:43:20 +0000 |
commit | 585bee48bac063f31696e308798f9432b5ba4116 (patch) | |
tree | 978be0b7826d0d5c657cd1063cb61011efb01c45 /test | |
parent | 57c8736e7dce5e63b4e1665d2c4fcf6e6ef959d0 (diff) | |
download | clang-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.cpp | 9 |
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}} |