summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/new-delete.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-09-14 21:34:24 +0000
committerJohn McCall <rjmccall@apple.com>2010-09-14 21:34:24 +0000
commitd3be2c83d5c982c04aed7d7d0e82407a726d7cdb (patch)
tree7ea14d7c6ef76bc7de8a3e5a66a1629997a2c81e /clang/test/SemaCXX/new-delete.cpp
parenta244f70113dee9627c78cacc4dca820d8bc8123a (diff)
downloadbcm5719-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.cpp18
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>();
+ }
+}
OpenPOWER on IntegriCloud