diff --git a/libcxx/test/std/containers/sequences/array/array.data/data.pass.cpp b/libcxx/test/std/containers/sequences/array/array.data/data.pass.cpp --- a/libcxx/test/std/containers/sequences/array/array.data/data.pass.cpp +++ b/libcxx/test/std/containers/sequences/array/array.data/data.pass.cpp @@ -35,6 +35,7 @@ typedef double T; typedef std::array C; C c = {1, 2, 3.5}; + ASSERT_NOEXCEPT(c.data()); T* p = c.data(); assert(p[0] == 1); assert(p[1] == 2); @@ -44,6 +45,7 @@ typedef double T; typedef std::array C; C c = {}; + ASSERT_NOEXCEPT(c.data()); T* p = c.data(); (void)p; } @@ -51,6 +53,7 @@ typedef double T; typedef std::array C; C c = {{}}; + ASSERT_NOEXCEPT(c.data()); const T* p = c.data(); (void)p; static_assert((std::is_same::value), ""); @@ -59,6 +62,7 @@ typedef NoDefault T; typedef std::array C; C c = {}; + ASSERT_NOEXCEPT(c.data()); T* p = c.data(); (void)p; } diff --git a/libcxx/test/std/containers/sequences/array/array.data/data_const.pass.cpp b/libcxx/test/std/containers/sequences/array/array.data/data_const.pass.cpp --- a/libcxx/test/std/containers/sequences/array/array.data/data_const.pass.cpp +++ b/libcxx/test/std/containers/sequences/array/array.data/data_const.pass.cpp @@ -35,6 +35,7 @@ typedef double T; typedef std::array C; const C c = {1, 2, 3.5}; + ASSERT_NOEXCEPT(c.data()); const T* p = c.data(); assert(p[0] == 1); assert(p[1] == 2); @@ -44,6 +45,7 @@ typedef double T; typedef std::array C; const C c = {}; + ASSERT_NOEXCEPT(c.data()); const T* p = c.data(); (void)p; } @@ -51,6 +53,7 @@ typedef NoDefault T; typedef std::array C; const C c = {}; + ASSERT_NOEXCEPT(c.data()); const T* p = c.data(); (void)p; } diff --git a/libcxx/test/std/containers/sequences/array/iterators.pass.cpp b/libcxx/test/std/containers/sequences/array/iterators.pass.cpp --- a/libcxx/test/std/containers/sequences/array/iterators.pass.cpp +++ b/libcxx/test/std/containers/sequences/array/iterators.pass.cpp @@ -33,11 +33,30 @@ TEST_CONSTEXPR NoDefault(int) { } }; +template +TEST_CONSTEXPR_CXX17 void check_noexcept(T& c) { + ASSERT_NOEXCEPT(c.begin()); + ASSERT_NOEXCEPT(c.end()); + ASSERT_NOEXCEPT(c.cbegin()); + ASSERT_NOEXCEPT(c.cend()); + ASSERT_NOEXCEPT(c.rbegin()); + ASSERT_NOEXCEPT(c.rend()); + ASSERT_NOEXCEPT(c.crbegin()); + ASSERT_NOEXCEPT(c.crend()); + + const T& cc = c; (void)cc; + ASSERT_NOEXCEPT(cc.begin()); + ASSERT_NOEXCEPT(cc.end()); + ASSERT_NOEXCEPT(cc.rbegin()); + ASSERT_NOEXCEPT(cc.rend()); +} + TEST_CONSTEXPR_CXX17 bool tests() { { typedef std::array C; C array = {}; + check_noexcept(array); typename C::iterator i = array.begin(); typename C::const_iterator j = array.cbegin(); assert(i == j); @@ -45,6 +64,7 @@ { typedef std::array C; C array = {}; + check_noexcept(array); typename C::iterator i = array.begin(); typename C::const_iterator j = array.cbegin(); assert(i == j); @@ -53,6 +73,7 @@ { typedef std::array C; C array = {}; + check_noexcept(array); typename C::iterator i = array.begin(); typename C::const_iterator j = array.cbegin(); assert(i == array.end()); @@ -61,6 +82,7 @@ { typedef std::array C; C array = {1}; + check_noexcept(array); typename C::iterator i = array.begin(); assert(*i == 1); assert(&*i == array.data()); @@ -70,6 +92,7 @@ { typedef std::array C; C array = {1, 2}; + check_noexcept(array); typename C::iterator i = array.begin(); assert(*i == 1); assert(&*i == array.data()); @@ -80,6 +103,7 @@ { typedef std::array C; C array = {1, 2, 3.5}; + check_noexcept(array); typename C::iterator i = array.begin(); assert(*i == 1); assert(&*i == array.data()); @@ -110,6 +134,7 @@ assert(!(ii1 != cii)); C c = {}; + check_noexcept(c); assert(c.begin() == std::begin(c)); assert(c.cbegin() == std::cbegin(c)); assert(c.rbegin() == std::rbegin(c)); @@ -150,6 +175,7 @@ assert(ii1 - cii == 0); C c = {}; + check_noexcept(c); assert(c.begin() == std::begin(c)); assert(c.cbegin() == std::cbegin(c)); assert(c.rbegin() == std::rbegin(c));