diff options
author | John McCall <rjmccall@apple.com> | 2010-09-14 21:34:24 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-09-14 21:34:24 +0000 |
commit | d3be2c83d5c982c04aed7d7d0e82407a726d7cdb (patch) | |
tree | 7ea14d7c6ef76bc7de8a3e5a66a1629997a2c81e /clang/test/SemaCXX/new-delete.cpp | |
parent | a244f70113dee9627c78cacc4dca820d8bc8123a (diff) | |
download | bcm5719-llvm-d3be2c83d5c982c04aed7d7d0e82407a726d7cdb.tar.gz bcm5719-llvm-d3be2c83d5c982c04aed7d7d0e82407a726d7cdb.zip |
The paired 'operator delete' for a placement 'operator new' is always a
placement 'operator delete', even if there are no placement args (i.e.
overload resolution selected an operator new with default arguments).
llvm-svn: 113861
Diffstat (limited to 'clang/test/SemaCXX/new-delete.cpp')
-rw-r--r-- | clang/test/SemaCXX/new-delete.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/new-delete.cpp b/clang/test/SemaCXX/new-delete.cpp index ef20aee009c..f6129d19841 100644 --- a/clang/test/SemaCXX/new-delete.cpp +++ b/clang/test/SemaCXX/new-delete.cpp @@ -354,3 +354,21 @@ namespace DeleteParam { void operator delete(void* const); }; } + +// <rdar://problem/8427878> +// Test that the correct 'operator delete' is selected to pair with +// the unexpected placement 'operator new'. +namespace PairedDelete { + template <class T> struct A { + A(); + void *operator new(size_t s, double d = 0); + void operator delete(void *p, double d); + void operator delete(void *p) { + T::dealloc(p); + } + }; + + A<int> *test() { + return new A<int>(); + } +} |