aboutsummaryrefslogtreecommitdiff
path: root/test/libcxx/containers/sequences/array/array.zero/db_indexing.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/libcxx/containers/sequences/array/array.zero/db_indexing.pass.cpp')
-rw-r--r--test/libcxx/containers/sequences/array/array.zero/db_indexing.pass.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/test/libcxx/containers/sequences/array/array.zero/db_indexing.pass.cpp b/test/libcxx/containers/sequences/array/array.zero/db_indexing.pass.cpp
new file mode 100644
index 000000000000..4d6ad6907388
--- /dev/null
+++ b/test/libcxx/containers/sequences/array/array.zero/db_indexing.pass.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// 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>::operator[] throws a debug exception.
+
+#define _LIBCPP_DEBUG 1
+#define _LIBCPP_DEBUG_USE_EXCEPTIONS
+#include <array>
+
+template <class Array>
+inline bool CheckDebugThrows(Array& Arr, size_t Index) {
+ try {
+ Arr[Index];
+ } 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, 0));
+ assert(CheckDebugThrows(c, 1));
+ assert(CheckDebugThrows(cc, 0));
+ assert(CheckDebugThrows(cc, 1));
+ }
+ {
+ typedef std::array<const int, 0> C;
+ C c = {{}};
+ C const& cc = c;
+ assert(CheckDebugThrows(c, 0));
+ assert(CheckDebugThrows(c, 1));
+ assert(CheckDebugThrows(cc, 0));
+ assert(CheckDebugThrows(cc, 1));
+ }
+}