summaryrefslogtreecommitdiff
path: root/test/libcxx/containers/sequences/array/array.zero/db_back.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/libcxx/containers/sequences/array/array.zero/db_back.pass.cpp')
-rw-r--r--test/libcxx/containers/sequences/array/array.zero/db_back.pass.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/test/libcxx/containers/sequences/array/array.zero/db_back.pass.cpp b/test/libcxx/containers/sequences/array/array.zero/db_back.pass.cpp
new file mode 100644
index 000000000000..465523f84d67
--- /dev/null
+++ b/test/libcxx/containers/sequences/array/array.zero/db_back.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: libcpp-no-exceptions
+// MODULES_DEFINES: _LIBCPP_DEBUG=1
+// MODULES_DEFINES: _LIBCPP_DEBUG_USE_EXCEPTIONS
+
+// Can't test the system lib because this test enables debug mode
+// UNSUPPORTED: with_system_cxx_lib
+
+// test array<T, 0>::front() throws a debug exception.
+
+#define _LIBCPP_DEBUG 1
+#define _LIBCPP_DEBUG_USE_EXCEPTIONS
+#include <array>
+
+template <class Array>
+inline bool CheckDebugThrows(Array& Arr) {
+ try {
+ Arr.back();
+ } catch (std::__libcpp_debug_exception const&) {
+ return true;
+ }
+ return false;
+}
+
+int main()
+{
+ {
+ typedef std::array<int, 0> C;
+ C c = {};
+ C const& cc = c;
+ assert(CheckDebugThrows(c));
+ assert(CheckDebugThrows(cc));
+ }
+ {
+ typedef std::array<const int, 0> C;
+ C c = {{}};
+ C const& cc = c;
+ assert(CheckDebugThrows(c));
+ assert(CheckDebugThrows(cc));
+ }
+}