diff options
| author | John McCall <rjmccall@apple.com> | 2010-06-11 17:36:40 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-06-11 17:36:40 +0000 |
| commit | b86a6b830ef733ef763f32dc135b6ed2e2a3faf6 (patch) | |
| tree | ecb4a3e55d8de3279cf799c3ba0fdbc44cb86536 /clang/test/SemaCXX/pseudo-destructors.cpp | |
| parent | 773cc98c3abb11e5f91197d5aa42944c476e7f06 (diff) | |
| download | bcm5719-llvm-b86a6b830ef733ef763f32dc135b6ed2e2a3faf6.tar.gz bcm5719-llvm-b86a6b830ef733ef763f32dc135b6ed2e2a3faf6.zip | |
Allow pseudo-destructors to be called on qualified pointers. Patch by
Troy Straszheim!
llvm-svn: 105823
Diffstat (limited to 'clang/test/SemaCXX/pseudo-destructors.cpp')
| -rw-r--r-- | clang/test/SemaCXX/pseudo-destructors.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/pseudo-destructors.cpp b/clang/test/SemaCXX/pseudo-destructors.cpp index 472e5b42fb2..30d9faac2e2 100644 --- a/clang/test/SemaCXX/pseudo-destructors.cpp +++ b/clang/test/SemaCXX/pseudo-destructors.cpp @@ -14,6 +14,11 @@ namespace N { typedef int OtherInteger; } +template <typename T> +void cv_test(const volatile T* cvt) { + cvt->T::~T(); // no-warning +} + void f(A* a, Foo *f, int *i, double *d) { a->~A(); a->A::~A(); @@ -41,8 +46,14 @@ void f(A* a, Foo *f, int *i, double *d) { i->N::OtherInteger::~Integer(); // expected-error{{'Integer' does not refer to a type name in pseudo-destructor expression; expected the name of type 'int'}} i->N::~Integer(); // expected-error{{'Integer' does not refer to a type name in pseudo-destructor expression; expected the name of type 'int'}} i->Integer::~Double(); // expected-error{{the type of object expression ('int') does not match the type being destroyed ('Double' (aka 'double')) in pseudo-destructor expression}} + + cv_test(a); + cv_test(f); + cv_test(i); + cv_test(d); } + typedef int Integer; void destroy_without_call(int *ip) { @@ -57,3 +68,4 @@ namespace N1 { void test_X0(N1::X0 &x0) { x0.~X0(); } + |

