diff options
author | Roger Ferrer Ibanez <roger.ferreribanez@arm.com> | 2016-11-01 15:46:16 +0000 |
---|---|---|
committer | Roger Ferrer Ibanez <roger.ferreribanez@arm.com> | 2016-11-01 15:46:16 +0000 |
commit | 8a915ed644b910ae9d7d2aef7ad491791fbd4944 (patch) | |
tree | 94c9f6f9eb9628a577e8d227b3b2646c3e03a2d1 /libcxx/test/std/strings/basic.string/string.capacity | |
parent | 6dd8fab443451e1bbab87186057a80e3088d6d84 (diff) | |
download | bcm5719-llvm-8a915ed644b910ae9d7d2aef7ad491791fbd4944.tar.gz bcm5719-llvm-8a915ed644b910ae9d7d2aef7ad491791fbd4944.zip |
Protect exceptional paths under libcpp-no-exceptions
These tests are of the form
try {
action-that-may-throw
assert(!exceptional-condition)
assert(some-other-facts)
} catch (relevant-exception) {
assert(exceptional-condition)
}
Under libcpp-no-exceptions there is still value in verifying
some-other-facts while avoiding the exceptional case. So for these tests
just conditionally check some-other-facts if exceptional-condition is
false. When exception are supported make sure that a true
exceptional-condition throws an exception
Differential Revision: https://reviews.llvm.org/D26136
llvm-svn: 285697
Diffstat (limited to 'libcxx/test/std/strings/basic.string/string.capacity')
3 files changed, 39 insertions, 15 deletions
diff --git a/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp index b2c254d1fb2..ad29f9cab5f 100644 --- a/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/reserve.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// -// XFAIL: libcpp-no-exceptions // <string> // void reserve(size_type res_arg=0); @@ -38,18 +37,27 @@ test(S s, typename S::size_type res_arg) { typename S::size_type old_cap = s.capacity(); S s0 = s; - try + if (res_arg <= s.max_size()) { s.reserve(res_arg); - assert(res_arg <= s.max_size()); assert(s == s0); assert(s.capacity() >= res_arg); assert(s.capacity() >= s.size()); } - catch (std::length_error&) +#ifndef TEST_HAS_NO_EXCEPTIONS + else { - assert(res_arg > s.max_size()); + try + { + s.reserve(res_arg); + assert(false); + } + catch (std::length_error&) + { + assert(res_arg > s.max_size()); + } } +#endif } int main() diff --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp index 55894159957..78200d50cb3 100644 --- a/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// -// XFAIL: libcpp-no-exceptions // <string> // void resize(size_type n); @@ -23,17 +22,26 @@ template <class S> void test(S s, typename S::size_type n, S expected) { - try + if (n <= s.max_size()) { s.resize(n); LIBCPP_ASSERT(s.__invariants()); - assert(n <= s.max_size()); assert(s == expected); } - catch (std::length_error&) +#ifndef TEST_HAS_NO_EXCEPTIONS + else { - assert(n > s.max_size()); + try + { + s.resize(n); + assert(false); + } + catch (std::length_error&) + { + assert(n > s.max_size()); + } } +#endif } int main() diff --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp index 79f972b2fee..288eb325252 100644 --- a/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// -// XFAIL: libcpp-no-exceptions // <string> // void resize(size_type n, charT c); @@ -23,17 +22,26 @@ template <class S> void test(S s, typename S::size_type n, typename S::value_type c, S expected) { - try + if (n <= s.max_size()) { s.resize(n, c); LIBCPP_ASSERT(s.__invariants()); - assert(n <= s.max_size()); assert(s == expected); } - catch (std::length_error&) +#ifndef TEST_HAS_NO_EXCEPTIONS + else { - assert(n > s.max_size()); + try + { + s.resize(n, c); + assert(false); + } + catch (std::length_error&) + { + assert(n > s.max_size()); + } } +#endif } int main() |