summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-02-21 18:36:56 +0000
committerDouglas Gregor <dgregor@apple.com>2010-02-21 18:36:56 +0000
commit90d554ecb30d5282aff54aca2f9b0f3751e83c8c (patch)
tree5a7fde105ec946945bbd76347cc49828f8340300 /clang/test
parent901e717f9295e5d9616777ad2a0c89c86ef5268d (diff)
downloadbcm5719-llvm-90d554ecb30d5282aff54aca2f9b0f3751e83c8c.tar.gz
bcm5719-llvm-90d554ecb30d5282aff54aca2f9b0f3751e83c8c.zip
Implement support for parsing pseudo-destructor expression with a nested-name-specifier, e.g.,
typedef int Int; int *p; p->Int::~Int(); This weakens the invariant that the only types in nested-name-specifiers are tag types (restricted to class types in C++98/03). However, we weaken this invariant as little as possible, accepting arbitrary types in nested-name-specifiers only when we're in a member access expression that looks like a pseudo-destructor expression. llvm-svn: 96743
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/SemaCXX/pseudo-destructors.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/test/SemaCXX/pseudo-destructors.cpp b/clang/test/SemaCXX/pseudo-destructors.cpp
index 02e2c14ca11..2cc233318ec 100644
--- a/clang/test/SemaCXX/pseudo-destructors.cpp
+++ b/clang/test/SemaCXX/pseudo-destructors.cpp
@@ -5,6 +5,7 @@ enum Foo { F };
typedef Foo Bar;
typedef int Integer;
+typedef double Double;
void g();
@@ -12,7 +13,7 @@ namespace N {
typedef Foo Wibble;
}
-void f(A* a, Foo *f, int *i) {
+void f(A* a, Foo *f, int *i, double *d) {
a->~A();
a->A::~A();
@@ -31,6 +32,11 @@ void f(A* a, Foo *f, int *i) {
f->N::~Wibble(); // FIXME: Cannot use typedef name in destructor id.
f->::~Bar(17, 42); // expected-error{{cannot have any arguments}}
+
+ i->~Integer();
+ i->Integer::~Integer();
+
+ i->Integer::~Double(); // expected-error{{the type of object expression ('int') does not match the type being destroyed ('double') in pseudo-destructor expression}}
}
typedef int Integer;
OpenPOWER on IntegriCloud