diff options
| author | Eric Fiselier <eric@efcs.ca> | 2016-10-14 22:47:08 +0000 |
|---|---|---|
| committer | Eric Fiselier <eric@efcs.ca> | 2016-10-14 22:47:08 +0000 |
| commit | d2003575ce98dc5c2c1539bc3ccded0625078201 (patch) | |
| tree | 3bef57181c863c2b4cf09916b35c57bc0be001b8 /libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array | |
| parent | 8bbc3158c36b9c29ea12e6e9e255314a4109612f (diff) | |
| download | bcm5719-llvm-d2003575ce98dc5c2c1539bc3ccded0625078201.tar.gz bcm5719-llvm-d2003575ce98dc5c2c1539bc3ccded0625078201.zip | |
Prevent new/delete replacement tests from being optimized away.
llvm-svn: 284289
Diffstat (limited to 'libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array')
3 files changed, 14 insertions, 17 deletions
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp index 62ffa3f6f0c..decf26ed7a3 100644 --- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp +++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp @@ -15,10 +15,7 @@ // XFAIL: clang-3, apple-clang // None of the current GCC compilers support this. -// XFAIL: gcc-4, gcc-5, gcc-6 - -// TODO Investigate why UBSAN prevents new from calling our replacement. -// XFAIL: ubsan +// XFAIL: gcc #include <new> #include <cstddef> @@ -58,28 +55,31 @@ void operator delete [] (void* p, std::align_val_t a) throw() struct alignas(OverAligned) A {}; struct alignas(std::max_align_t) B {}; +B* volatile b; // Escape the memory +A* volatile a; + int main() { reset(); { - B *x = new B[2]; + b = new B[2]; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); - delete [] x; + delete [] b; assert(1 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); } reset(); { - A *x = new A[2]; + a = new A[2]; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(0 == aligned_delete_called); - delete [] x; + delete [] a; assert(0 == unsized_delete_called); assert(0 == unsized_delete_nothrow_called); assert(1 == aligned_delete_called); diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp index 5887bb0bdf3..3b0cb27e1de 100644 --- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp +++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp @@ -11,10 +11,6 @@ // UNSUPPORTED: sanitizer-new-delete -// TODO Investigate why UBSAN prevents new from calling our replacement. -// XFAIL: ubsan - - #include <new> #include <cstddef> #include <cstdlib> @@ -45,9 +41,11 @@ struct A ~A() {--A_constructed;} }; +A* volatile ap; + int main() { - A* ap = new (std::nothrow) A[3]; + ap = new (std::nothrow) A[3]; assert(ap); assert(A_constructed == 3); assert(new_called); diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp index 1e78ea8fe26..2815f5bc733 100644 --- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp +++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp @@ -11,9 +11,6 @@ // UNSUPPORTED: sanitizer-new-delete -// TODO Investigate why UBSAN prevents new from calling our replacement. -// XFAIL: ubsan - #include <new> #include <cstddef> @@ -45,9 +42,11 @@ struct A ~A() {--A_constructed;} }; +A* volatile ap; + int main() { - A* ap = new A[3]; + ap = new A[3]; assert(ap); assert(A_constructed == 3); assert(new_called == 1); |

