summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/language.support
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-10-14 22:47:08 +0000
committerEric Fiselier <eric@efcs.ca>2016-10-14 22:47:08 +0000
commitd2003575ce98dc5c2c1539bc3ccded0625078201 (patch)
tree3bef57181c863c2b4cf09916b35c57bc0be001b8 /libcxx/test/std/language.support
parent8bbc3158c36b9c29ea12e6e9e255314a4109612f (diff)
downloadbcm5719-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')
-rw-r--r--libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp16
-rw-r--r--libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp8
-rw-r--r--libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp7
-rw-r--r--libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp15
-rw-r--r--libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp7
-rw-r--r--libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_calls_unsized_delete.pass.cpp8
-rw-r--r--libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp7
7 files changed, 31 insertions, 37 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);
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp
index 67a51911b7d..30ce114c387 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp
@@ -15,10 +15,8 @@
// XFAIL: clang-3, apple-clang
// None of the current GCC compilers support this.
-// XFAIL: gcc-4, gcc-5, gcc-6
+// XFAIL: gcc
-// TODO Investigate why UBSAN prevents new from calling our replacement.
-// XFAIL: ubsan
#include <new>
#include <cstddef>
@@ -58,28 +56,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 bp;
+A* volatile ap;
+
int main()
{
reset();
{
- B *x = new B;
+ bp = new B;
assert(0 == unsized_delete_called);
assert(0 == unsized_delete_nothrow_called);
assert(0 == aligned_delete_called);
- delete x;
+ delete bp;
assert(1 == unsized_delete_called);
assert(0 == unsized_delete_nothrow_called);
assert(0 == aligned_delete_called);
}
reset();
{
- A *x = new A;
+ ap = new A;
assert(0 == unsized_delete_called);
assert(0 == unsized_delete_nothrow_called);
assert(0 == aligned_delete_called);
- delete x;
+ delete ap;
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.single/new_nothrow_replace.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp
index eb8319bac2f..9df4ace1c00 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp
@@ -11,9 +11,6 @@
// UNSUPPORTED: sanitizer-new-delete
-// TODO Investigate why UBSAN prevents nothrow new from calling our replacement.
-// XFAIL: ubsan
-
#include <new>
#include <cstddef>
#include <cstdlib>
@@ -44,9 +41,11 @@ struct A
~A() {A_constructed = false;}
};
+A* volatile ap;
+
int main()
{
- A* ap = new (std::nothrow) A;
+ ap = new (std::nothrow) A;
assert(ap);
assert(A_constructed);
assert(new_called);
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_calls_unsized_delete.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_calls_unsized_delete.pass.cpp
index f656d1cd712..06be2eaf1bd 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_calls_unsized_delete.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_calls_unsized_delete.pass.cpp
@@ -13,10 +13,6 @@
// UNSUPPORTED: sanitizer-new-delete
-// TODO Investigate why UBSAN prevents new from calling our replacement.
-// XFAIL: ubsan
-
-
#include <new>
#include <cstddef>
#include <cstdlib>
@@ -37,9 +33,11 @@ void operator delete(void* p, const std::nothrow_t&) throw()
std::free(p);
}
+int* volatile x;
+
int main()
{
- int *x = new int(42);
+ x = new int(42);
assert(0 == delete_called);
assert(0 == delete_nothrow_called);
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp
index 24d33e210f5..8f70427b464 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp
@@ -14,9 +14,6 @@
// UNSUPPORTED: sanitizer-new-delete
-// TODO Investigate why UBSAN prevents new from calling our replacement.
-// XFAIL: ubsan
-
// NOTE: Only clang-3.7 and GCC 5.1 and greater support -fsized-deallocation.
// REQUIRES: fsized-deallocation
@@ -58,9 +55,11 @@ void operator delete(void* p, std::size_t) throw()
std::free(p);
}
+int* volatile x;
+
int main()
{
- int *x = new int(42);
+ x = new int(42);
assert(0 == sized_delete_called);
assert(0 == unsized_delete_called);
assert(0 == unsized_delete_nothrow_called);
OpenPOWER on IntegriCloud