diff --git a/libcxx/test/libcxx/containers/sequences/list/list.cons/db_copy.pass.cpp b/libcxx/test/libcxx/containers/sequences/list/list.cons/db_copy.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/list/list.cons/db_copy.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/list/list.cons/db_copy.pass.cpp @@ -13,13 +13,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { @@ -27,8 +25,7 @@ l1.push_back(1); l1.push_back(2); l1.push_back(3); std::list::iterator i = l1.begin(); std::list l2 = l1; - l2.erase(i); - assert(false); + EXPECTED_FAIL(l2.erase(i), "list::erase(iterator) called with an iterator not referring to this list"); - return 0; + return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/list/list.cons/db_move.pass.cpp b/libcxx/test/libcxx/containers/sequences/list/list.cons/db_move.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/list/list.cons/db_move.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/list/list.cons/db_move.pass.cpp @@ -14,15 +14,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(1)) #include -#include #include + #include "test_macros.h" -#include "MoveOnly.h" -#include "test_allocator.h" -#include "min_allocator.h" int main(int, char**) { diff --git a/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list.pass.cpp b/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list.pass.cpp @@ -13,21 +13,19 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { { std::list v1(3); std::list v2(3); - v1.splice(v2.begin(), v2); - assert(false); + EXPECTED_FAIL(v1.splice(v2.begin(), v2), + "list::splice(iterator, list) called with an iterator not referring to this list"); } return 0; diff --git a/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list_iter.pass.cpp b/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list_iter.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list_iter.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list_iter.pass.cpp @@ -13,21 +13,20 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { { std::list v1(3); std::list v2(3); - v1.splice(v1.begin(), v2, v1.begin()); - assert(false); + EXPECTED_FAIL( + v1.splice(v1.begin(), v2, v1.begin()), + "list::splice(iterator, list, iterator) called with second iterator not referring to list argument"); } return 0; diff --git a/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list_iter_iter.pass.cpp b/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list_iter_iter.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list_iter_iter.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/list/list.ops/db_splice_pos_list_iter_iter.pass.cpp @@ -13,21 +13,20 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { { - std::list v1(3); - std::list v2(3); - v1.splice(v1.begin(), v2, v2.begin(), v1.end()); - assert(false); + std::list v1(3); + std::list v2(3); + EXPECTED_FAIL( + v1.splice(v1.begin(), v2, v2.begin(), v1.end()), + "list::splice(iterator, list, iterator, iterator) called with third iterator not referring to list argument"); } return 0; diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_back.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_back.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_back.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_back.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -29,8 +26,7 @@ C c(1); assert(c.back() == 0); c.clear(); - assert(c.back() == 0); - assert(false); + EXPECTED_FAIL(c.back(), "back() called for empty vector"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_back_2.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_back_2.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_back_2.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_back_2.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -30,8 +27,7 @@ C c(1); assert(c.back() == 0); c.clear(); - assert(c.back() == 0); - assert(false); + EXPECTED_FAIL(c.back(), "back() called for empty vector"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_front.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_front.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_front.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_front.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -29,8 +26,7 @@ C c(1); assert(c.front() == 0); c.clear(); - assert(c.front() == 0); - assert(false); + EXPECTED_FAIL(c.front(), "front() called for empty vector"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_front_2.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_front_2.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_front_2.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_front_2.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -30,8 +27,7 @@ C c(1); assert(c.front() == 0); c.clear(); - assert(c.front() == 0); - assert(false); + EXPECTED_FAIL(c.front(), "front() called for empty vector"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_index.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_index.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_index.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_index.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -29,8 +26,7 @@ C c(1); assert(c[0] == 0); c.clear(); - assert(c[0] == 0); - assert(false); + EXPECTED_FAIL(c[0], "vector[] index out of bounds"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_index_2.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_index_2.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_index_2.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_index_2.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -30,8 +27,7 @@ C c(1); assert(c[0] == 0); c.clear(); - assert(c[0] == 0); - assert(false); + EXPECTED_FAIL(c[0], "vector[] index out of bounds"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_10.pass.cpp @@ -13,15 +13,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -29,9 +25,7 @@ typedef std::vector > C; C c1; C c2; - int i = c1.begin() - c2.begin(); - (void)i; - assert(false); + EXPECTED_FAIL(c1.begin() - c2.begin(), "Attempted to subtract incompatible iterators"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_11.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_11.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_11.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_11.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -30,8 +27,7 @@ C c(1); C::iterator i = c.begin(); assert(i[0] == 0); - assert(i[1] == 0); - assert(false); + EXPECTED_FAIL(i[1], "Attempted to subscript iterator outside of valid range"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_12.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_12.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_12.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_12.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -32,8 +29,7 @@ i += 1; assert(i == c.end()); i = c.begin(); - i += 2; - assert(false); + EXPECTED_FAIL(i + 2, "Attempted to add/subtract iterator outside of valid range"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_13.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_13.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_13.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_13.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -31,8 +28,7 @@ C::iterator i = c.end(); --i; assert(i == c.begin()); - --i; - assert(false); + EXPECTED_FAIL(--i, "Attempted to decrement non-decrementable iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_14.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_14.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_14.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_14.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -31,8 +28,7 @@ C::iterator i = c.begin(); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_15.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_15.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_15.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_15.pass.cpp @@ -13,15 +13,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -29,9 +25,7 @@ typedef std::vector > C; C c(1); C::iterator i = c.end(); - T j = *i; - (void)j; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_2.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_2.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_2.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_2.pass.cpp @@ -13,24 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; typedef std::vector C; C c1; C c2; - bool b = c1.begin() < c2.begin(); - (void)b; - assert(false); + EXPECTED_FAIL(c1.begin() < c2.begin(), "Attempted to compare incomparable iterators"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_3.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_3.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_3.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_3.pass.cpp @@ -13,24 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; typedef std::vector C; C c1; C c2; - int i = c1.begin() - c2.begin(); - (void)i; - assert(false); + EXPECTED_FAIL(c1.begin() - c2.begin(), "Attempted to subtract incompatible iterators"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_4.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_4.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_4.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_4.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -29,8 +26,7 @@ C c(1); C::iterator i = c.begin(); assert(i[0] == 0); - assert(i[1] == 0); - assert(false); + EXPECTED_FAIL(i[1], "Attempted to subscript iterator outside of valid range"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_5.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_5.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_5.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_5.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -31,8 +28,7 @@ i += 1; assert(i == c.end()); i = c.begin(); - i += 2; - assert(false); + EXPECTED_FAIL(i + 2, "Attempted to add/subtract iterator outside of valid range"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_6.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_6.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_6.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_6.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -30,8 +27,7 @@ C::iterator i = c.end(); --i; assert(i == c.begin()); - --i; - assert(false); + EXPECTED_FAIL(--i, "Attempted to decrement non-decrementable iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_7.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -30,8 +27,7 @@ C::iterator i = c.begin(); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_8.pass.cpp @@ -13,24 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; typedef std::vector C; C c(1); C::iterator i = c.end(); - T j = *i; - (void)j; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/sequences/vector/db_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/sequences/vector/db_iterators_9.pass.cpp @@ -13,15 +13,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -29,9 +25,7 @@ typedef std::vector > C; C c1; C c2; - bool b = c1.begin() < c2.begin(); - (void)b; - assert(false); + EXPECTED_FAIL(c1.begin() < c2.begin(), "Attempted to compare incomparable iterators"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_insert_hint_const_lvalue.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_insert_hint_const_lvalue.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_insert_hint_const_lvalue.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_insert_hint_const_lvalue.pass.cpp @@ -13,23 +13,26 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_map C; - typedef C::iterator R; typedef C::value_type P; C c; C c2; C::const_iterator e = c2.end(); P v(3.5, 3); - R r = c.insert(e, v); - assert(false); +#if TEST_STD_VER < 11 + EXPECTED_FAIL(c.insert(e, v), "unordered_map::insert(const_iterator, const value_type&) called with an iterator " + "not referring to this unordered_map"); +#else + EXPECTED_FAIL(c.insert(e, v), "unordered_map::insert(const_iterator, value_type&&) called with an iterator not " + "referring to this unordered_map"); +#endif return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_insert_hint_rvalue.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_insert_hint_rvalue.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_insert_hint_rvalue.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_insert_hint_rvalue.pass.cpp @@ -17,12 +17,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_map C; @@ -31,8 +30,8 @@ C c; C c2; C::const_iterator e = c2.end(); - R r = c.insert(e, P(3.5, 3)); - assert(false); + EXPECTED_FAIL(c.insert(e, P(3.5, 3)), "unordered_map::insert(const_iterator, const value_type&) called with an " + "iterator not referring to this unordered_map"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_10.pass.cpp @@ -14,15 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -31,8 +28,7 @@ C c; c.insert(std::make_pair(1, "one")); C::iterator i = c.end(); - C::value_type j = *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_7.pass.cpp @@ -13,14 +13,13 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_map C; @@ -29,8 +28,7 @@ C::iterator i = c.begin(); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_8.pass.cpp @@ -13,22 +13,19 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_map C; C c; c.insert(std::make_pair(1, "one")); C::iterator i = c.end(); - C::value_type j = *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_iterators_9.pass.cpp @@ -14,15 +14,13 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -33,8 +31,7 @@ C::iterator i = c.begin(); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_10.pass.cpp @@ -14,14 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -29,8 +27,7 @@ min_allocator>> C; C c(1); C::local_iterator i = c.end(0); - C::value_type j = *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_7.pass.cpp @@ -13,13 +13,13 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include #include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_map C; @@ -30,8 +30,7 @@ assert(i != c.end(b)); ++i; assert(i == c.end(b)); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_8.pass.cpp @@ -13,20 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_map C; C c(1); C::local_iterator i = c.end(0); - C::value_type j = *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_9.pass.cpp @@ -14,14 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -33,8 +31,7 @@ assert(i != c.end(b)); ++i; assert(i == c.end(b)); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_move.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_move.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_move.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_move.pass.cpp @@ -14,11 +14,9 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" diff --git a/libcxx/test/libcxx/containers/unord/unord.map/db_swap_1.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.map/db_swap_1.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.map/db_swap_1.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.map/db_swap_1.pass.cpp @@ -17,12 +17,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::pair P; @@ -36,8 +35,8 @@ c1.erase(i2); c2.erase(i1); std::unordered_map::iterator j = i1; - c1.erase(i1); - assert(false); + EXPECTED_FAIL(c1.erase(i1), + "unordered container erase(iterator) called with an iterator not referring to this container"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_insert_hint_const_lvalue.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_insert_hint_const_lvalue.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_insert_hint_const_lvalue.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_insert_hint_const_lvalue.pass.cpp @@ -13,23 +13,21 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_multimap C; - typedef C::iterator R; typedef C::value_type P; C c; C c2; C::const_iterator e = c2.end(); P v(3.5, 3); - R r = c.insert(e, v); - assert(false); + EXPECTED_FAIL(c.insert(e, v), "unordered container::emplace_hint(const_iterator, args...) called with an iterator " + "not referring to this unordered container"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_insert_hint_rvalue.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_insert_hint_rvalue.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_insert_hint_rvalue.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_insert_hint_rvalue.pass.cpp @@ -17,12 +17,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_multimap C; @@ -31,8 +30,8 @@ C c; C c2; C::const_iterator e = c2.end(); - R r = c.insert(e, P(3.5, 3)); - assert(false); + EXPECTED_FAIL(c.insert(e, P(3.5, 3)), "unordered container::emplace_hint(const_iterator, args...) called with an " + "iterator not referring to this unordered container"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_10.pass.cpp @@ -14,15 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#include -#include #include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -31,8 +28,7 @@ C c; c.insert(std::make_pair(1, "one")); C::iterator i = c.end(); - C::value_type j = *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_7.pass.cpp @@ -13,14 +13,13 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_multimap C; @@ -29,8 +28,7 @@ C::iterator i = c.begin(); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_8.pass.cpp @@ -13,22 +13,19 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) -#include #include #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_multimap C; C c; c.insert(std::make_pair(1, "one")); C::iterator i = c.end(); - C::value_type j = *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_iterators_9.pass.cpp @@ -14,15 +14,13 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -33,8 +31,7 @@ C::iterator i = c.begin(); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_10.pass.cpp @@ -14,15 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -30,8 +27,7 @@ min_allocator>> C; C c(1); C::local_iterator i = c.end(0); - C::value_type j = *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_7.pass.cpp @@ -13,13 +13,13 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include #include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_multimap C; @@ -30,8 +30,7 @@ assert(i != c.end(b)); ++i; assert(i == c.end(b)); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_8.pass.cpp @@ -13,20 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_multimap C; C c(1); C::local_iterator i = c.end(0); - C::value_type j = *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_9.pass.cpp @@ -14,15 +14,13 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -35,8 +33,7 @@ assert(i != c.end(b)); ++i; assert(i == c.end(b)); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_move.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_move.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_move.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_move.pass.cpp @@ -15,11 +15,9 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" diff --git a/libcxx/test/libcxx/containers/unord/unord.multimap/db_swap_1.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multimap/db_swap_1.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multimap/db_swap_1.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multimap/db_swap_1.pass.cpp @@ -17,13 +17,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { @@ -38,8 +36,8 @@ c1.erase(i2); c2.erase(i1); std::unordered_multimap::iterator j = i1; - c1.erase(i1); - assert(false); + EXPECTED_FAIL(c1.erase(i1), + "unordered container erase(iterator) called with an iterator not referring to this container"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_insert_hint_const_lvalue.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_insert_hint_const_lvalue.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_insert_hint_const_lvalue.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_insert_hint_const_lvalue.pass.cpp @@ -13,23 +13,21 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_multiset C; - typedef C::iterator R; typedef C::value_type P; C c; C c2; C::const_iterator e = c2.end(); P v(3.5); - R r = c.insert(e, v); - assert(false); + EXPECTED_FAIL(c.insert(e, v), "unordered container::emplace_hint(const_iterator, args...) called with an iterator " + "not referring to this unordered container"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_10.pass.cpp @@ -14,13 +14,11 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -28,8 +26,7 @@ typedef std::unordered_multiset, std::equal_to, min_allocator> C; C c(1); C::iterator i = c.end(); - (void) *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container const_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_7.pass.cpp @@ -13,12 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -29,8 +29,7 @@ assert(i != c.end()); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container const_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_8.pass.cpp @@ -13,20 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; typedef std::unordered_multiset C; C c(1); C::iterator i = c.end(); - (void) *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container const_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_9.pass.cpp @@ -14,13 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -31,8 +30,7 @@ assert(i != c.end()); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container const_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_10.pass.cpp @@ -14,13 +14,11 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -28,8 +26,7 @@ typedef std::unordered_multiset, std::equal_to, min_allocator> C; C c(1); C::local_iterator i = c.end(0); - (void) *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container const_local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_7.pass.cpp @@ -13,12 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -30,8 +30,7 @@ assert(i != c.end(b)); ++i; assert(i == c.end(b)); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container const_local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_8.pass.cpp @@ -13,20 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; typedef std::unordered_multiset C; C c(1); C::local_iterator i = c.end(0); - (void) *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container const_local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_9.pass.cpp @@ -14,13 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -32,8 +31,7 @@ assert(i != c.end(b)); ++i; assert(i == c.end(b)); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container const_local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_move.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_move.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_move.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_move.pass.cpp @@ -15,11 +15,9 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" diff --git a/libcxx/test/libcxx/containers/unord/unord.multiset/db_swap_1.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.multiset/db_swap_1.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.multiset/db_swap_1.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.multiset/db_swap_1.pass.cpp @@ -17,12 +17,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { int a1[] = {1, 3, 7, 9, 10}; @@ -35,8 +34,8 @@ c1.erase(i2); c2.erase(i1); std::unordered_multiset::iterator j = i1; - c1.erase(i1); - assert(false); + EXPECTED_FAIL(c1.erase(i1), + "unordered container erase(iterator) called with an iterator not referring to this container"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_insert_hint_const_lvalue.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_insert_hint_const_lvalue.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_insert_hint_const_lvalue.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_insert_hint_const_lvalue.pass.cpp @@ -13,23 +13,21 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::unordered_set C; - typedef C::iterator R; typedef C::value_type P; C c; C c2; C::const_iterator e = c2.end(); P v(3.5); - R r = c.insert(e, v); - assert(false); + EXPECTED_FAIL(c.insert(e, v), "unordered_set::insert(const_iterator, const value_type&) called with an iterator " + "not referring to this unordered_set"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_10.pass.cpp @@ -14,13 +14,11 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -28,8 +26,7 @@ typedef std::unordered_set, std::equal_to, min_allocator> C; C c(1); C::iterator i = c.end(); - (void) *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container const_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_7.pass.cpp @@ -13,12 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -29,8 +29,7 @@ assert(i != c.end()); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container const_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_8.pass.cpp @@ -13,20 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; typedef std::unordered_set C; C c(1); C::iterator i = c.end(); - (void) *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container const_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_iterators_9.pass.cpp @@ -14,13 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -31,8 +30,7 @@ assert(i != c.end()); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container const_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_10.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_10.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_10.pass.cpp @@ -14,13 +14,11 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -28,8 +26,7 @@ typedef std::unordered_set, std::equal_to, min_allocator> C; C c(1); C::local_iterator i = c.end(0); - (void) *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container const_local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_7.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_7.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_7.pass.cpp @@ -13,12 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; @@ -30,8 +30,7 @@ assert(i != c.end(b)); ++i; assert(i == c.end(b)); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container const_local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_8.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_8.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_8.pass.cpp @@ -13,20 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef int T; typedef std::unordered_set C; C c(1); C::local_iterator i = c.end(0); - (void) *i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable unordered container const_local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_9.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_9.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_9.pass.cpp @@ -14,13 +14,12 @@ // UNSUPPORTED: c++03 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -32,8 +31,7 @@ assert(i != c.end(b)); ++i; assert(i == c.end(b)); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable unordered container const_local_iterator"); return 0; } diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_move.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_move.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_move.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_move.pass.cpp @@ -14,11 +14,9 @@ // unordered_set(unordered_set&& u); // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include #include "test_macros.h" diff --git a/libcxx/test/libcxx/containers/unord/unord.set/db_swap_1.pass.cpp b/libcxx/test/libcxx/containers/unord/unord.set/db_swap_1.pass.cpp --- a/libcxx/test/libcxx/containers/unord/unord.set/db_swap_1.pass.cpp +++ b/libcxx/test/libcxx/containers/unord/unord.set/db_swap_1.pass.cpp @@ -17,12 +17,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { int a1[] = {1, 3, 7, 9, 10}; @@ -35,8 +34,8 @@ c1.erase(i2); c2.erase(i1); std::unordered_set::iterator j = i1; - c1.erase(i1); - assert(false); + EXPECTED_FAIL(c1.erase(i1), + "unordered container erase(iterator) called with an iterator not referring to this container"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/db_back.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/db_back.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/db_back.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/db_back.pass.cpp @@ -13,23 +13,19 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string S; S s(1, '\0'); assert(s.back() == 0); s.clear(); - assert(s.back() == 0); - assert(false); + EXPECTED_FAIL(s.back(), "string::back(): string is empty"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/db_back_2.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/db_back_2.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/db_back_2.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/db_back_2.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -29,8 +26,7 @@ S s(1, '\0'); assert(s.back() == 0); s.clear(); - assert(s.back() == 0); - assert(false); + EXPECTED_FAIL(s.back(), "string::back(): string is empty"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/db_cindex.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/db_cindex.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/db_cindex.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/db_cindex.pass.cpp @@ -13,22 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string S; const S s; assert(s[0] == 0); - assert(s[1] == 0); - assert(false); + EXPECTED_FAIL(s[1], "string index out of bounds"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/db_cindex_2.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/db_cindex_2.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/db_cindex_2.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/db_cindex_2.pass.cpp @@ -13,23 +13,19 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { typedef std::basic_string, min_allocator > S; const S s; assert(s[0] == 0); - assert(s[1] == 0); - assert(false); + EXPECTED_FAIL(s[1], "string index out of bounds"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/db_front.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/db_front.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/db_front.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/db_front.pass.cpp @@ -13,23 +13,19 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string S; S s(1, '\0'); assert(s.front() == 0); s.clear(); - assert(s.front() == 0); - assert(false); + EXPECTED_FAIL(s.front(), "string::front(): string is empty"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/db_front_2.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/db_front_2.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/db_front_2.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/db_front_2.pass.cpp @@ -13,15 +13,11 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -29,8 +25,7 @@ S s(1, '\0'); assert(s.front() == 0); s.clear(); - assert(s.front() == 0); - assert(false); + EXPECTED_FAIL(s.front(), "string::front(): string is empty"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/db_index.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/db_index.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/db_index.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/db_index.pass.cpp @@ -13,22 +13,17 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string S; S s; assert(s[0] == 0); - assert(s[1] == 0); - assert(false); + EXPECTED_FAIL(s[1], "string index out of bounds"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.access/db_index_2.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.access/db_index_2.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.access/db_index_2.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.access/db_index_2.pass.cpp @@ -13,23 +13,19 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { typedef std::basic_string, min_allocator > S; S s; assert(s[0] == 0); - assert(s[1] == 0); - assert(false); + EXPECTED_FAIL(s[1], "string index out of bounds"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_10.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_10.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_10.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_10.pass.cpp @@ -13,24 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { typedef std::basic_string, min_allocator > S; S s1; S s2; - int i = s1.begin() - s2.begin(); - (void)i; - assert(false); + EXPECTED_FAIL(s1.begin() - s2.begin(), "Attempted to subtract incompatible iterators"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_11.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_11.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_11.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_11.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -29,8 +26,7 @@ C c(1, '\0'); C::iterator i = c.begin(); assert(i[0] == 0); - assert(i[1] == 0); - assert(false); + EXPECTED_FAIL(i[1], "Attempted to subscript iterator outside of valid range"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_12.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_12.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_12.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_12.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -31,8 +28,7 @@ i += 1; assert(i == c.end()); i = c.begin(); - i += 2; - assert(false); + EXPECTED_FAIL(i += 2, "Attempted to add/subtract iterator outside of valid range"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_13.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_13.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_13.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_13.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -30,8 +27,7 @@ C::iterator i = c.end(); --i; assert(i == c.begin()); - --i; - assert(false); + EXPECTED_FAIL(--i, "Attempted to decrement non-decrementable iterator"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_14.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_14.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_14.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_14.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { @@ -30,8 +27,7 @@ C::iterator i = c.begin(); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable iterator"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_15.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_15.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_15.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_15.pass.cpp @@ -13,23 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { typedef std::basic_string, min_allocator > C; C c(1, '\0'); C::iterator i = c.end(); - (void)*i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable iterator"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_2.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_2.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_2.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_2.pass.cpp @@ -13,23 +13,17 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string S; S s1; S s2; - bool b = s1.begin() < s2.begin(); - (void)b; - assert(false); + EXPECTED_FAIL(s1.begin() < s2.begin(), "Attempted to compare incomparable iterators"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_3.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_3.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_3.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_3.pass.cpp @@ -13,23 +13,17 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string S; S s1; S s2; - int i = s1.begin() - s2.begin(); - (void)i; - assert(false); + EXPECTED_FAIL(s1.begin() - s2.begin(), "Attempted to subtract incompatible iterators"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_4.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_4.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_4.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_4.pass.cpp @@ -13,23 +13,19 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string C; C c(1, '\0'); C::iterator i = c.begin(); assert(i[0] == 0); - assert(i[1] == 0); - assert(false); + EXPECTED_FAIL(i[1], "Attempted to subscript iterator outside of valid range"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_5.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_5.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_5.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_5.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string C; @@ -30,8 +27,7 @@ i += 1; assert(i == c.end()); i = c.begin(); - i += 2; - assert(false); + EXPECTED_FAIL(i += 2, "Attempted to add/subtract iterator outside of valid range"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_6.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_6.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_6.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_6.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string C; @@ -29,8 +26,7 @@ C::iterator i = c.end(); --i; assert(i == c.begin()); - --i; - assert(false); + EXPECTED_FAIL(--i, "Attempted to decrement non-decrementable iterator"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_7.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_7.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_7.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_7.pass.cpp @@ -13,15 +13,12 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include #include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string C; @@ -29,8 +26,7 @@ C::iterator i = c.begin(); ++i; assert(i == c.end()); - ++i; - assert(false); + EXPECTED_FAIL(++i, "Attempted to increment non-incrementable iterator"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_8.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_8.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_8.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_8.pass.cpp @@ -13,22 +13,17 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" int main(int, char**) { typedef std::string C; C c(1, '\0'); C::iterator i = c.end(); - (void)*i; - assert(false); + EXPECTED_FAIL(*i, "Attempted to dereference a non-dereferenceable iterator"); return 0; } diff --git a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_9.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_9.pass.cpp --- a/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_9.pass.cpp +++ b/libcxx/test/libcxx/strings/basic.string/string.iterators/db_iterators_9.pass.cpp @@ -13,24 +13,18 @@ // UNSUPPORTED: libcxx-no-debug-mode // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DEBUG=1 -#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) #include -#include -#include -#include -#include #include "test_macros.h" +#include "debug_macros.h" #include "min_allocator.h" int main(int, char**) { typedef std::basic_string, min_allocator > S; S s1; S s2; - bool b = s1.begin() < s2.begin(); - (void)b; - assert(false); + EXPECTED_FAIL(s1.begin() < s2.begin(), "Attempted to compare incomparable iterators"); return 0; } diff --git a/libcxx/test/support/debug_macros.h b/libcxx/test/support/debug_macros.h new file mode 100644 --- /dev/null +++ b/libcxx/test/support/debug_macros.h @@ -0,0 +1,33 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef TEST_SUPPORT_DEBUG_MACROS_H +#define TEST_SUPPORT_DEBUG_MACROS_H + +#include <__debug> +#include +#include + +static const char* expected_libcpp_assert_message = 0; + +TEST_NORETURN static void test_debug_function(std::__libcpp_debug_info const& info) { + if (0 == std::strcmp(info.__msg_, expected_libcpp_assert_message)) + std::exit(0); + std::fprintf(stderr, "%s\n", info.what().c_str()); + std::abort(); +} + +#define EXPECTED_FAIL(expr, m) \ + do { \ + ::expected_libcpp_assert_message = m; \ + std::__libcpp_set_debug_function(&::test_debug_function); \ + (void)(expr); \ + assert(false); \ + } while (false) + +#endif // TEST_SUPPORT_DEBUG_MACROS_H