diff options
Diffstat (limited to 'test/SemaCXX/pseudo-destructors.cpp')
| -rw-r--r-- | test/SemaCXX/pseudo-destructors.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/SemaCXX/pseudo-destructors.cpp b/test/SemaCXX/pseudo-destructors.cpp index 45f1eafba10a..08938bf34a79 100644 --- a/test/SemaCXX/pseudo-destructors.cpp +++ b/test/SemaCXX/pseudo-destructors.cpp @@ -89,3 +89,26 @@ template<typename T> using Id = T; void AliasTemplate(int *p) { p->~Id<int>(); } + +namespace dotPointerAccess { +struct Base { + virtual ~Base() {} +}; + +struct Derived : Base { + ~Derived() {} +}; + +void test() { + Derived d; + static_cast<Base *>(&d).~Base(); // expected-error {{member reference type 'dotPointerAccess::Base *' is a pointer; did you mean to use '->'}} + d->~Derived(); // expected-error {{member reference type 'dotPointerAccess::Derived' is not a pointer; did you mean to use '.'}} +} + +typedef Derived *Foo; + +void test2(Foo d) { + d.~Foo(); // This is ok + d.~Derived(); // expected-error {{member reference type 'dotPointerAccess::Foo' (aka 'dotPointerAccess::Derived *') is a pointer; did you mean to use '->'}} +} +} |
