From: Marshall Clow Date: Fri, 26 Apr 2019 17:10:03 +0000 (+0000) Subject: Add '_LIBCPP_ASSERT(ready())' to several match_results method that have this precondt... X-Git-Tag: llvmorg-10-init~6906 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c29db2d83ed57d74d1f9987324e3d6ef112a8ed3;p=platform%2Fupstream%2Fllvm.git Add '_LIBCPP_ASSERT(ready())' to several match_results method that have this precondtion. Fix several tests which did not honor this precondition. Thanks to Andrey Maksimov for pointing this out. llvm-svn: 359324 --- diff --git a/libcxx/include/regex b/libcxx/include/regex index b9aa9d6..1f397cd 100644 --- a/libcxx/include/regex +++ b/libcxx/include/regex @@ -5296,21 +5296,41 @@ public: // element access: _LIBCPP_INLINE_VISIBILITY difference_type length(size_type __sub = 0) const - {return (*this)[__sub].length();} + { + _LIBCPP_ASSERT(ready(), "match_results::length() called when not ready"); + return (*this)[__sub].length(); + } _LIBCPP_INLINE_VISIBILITY difference_type position(size_type __sub = 0) const - {return _VSTD::distance(__position_start_, (*this)[__sub].first);} + { + _LIBCPP_ASSERT(ready(), "match_results::position() called when not ready"); + return _VSTD::distance(__position_start_, (*this)[__sub].first); + } _LIBCPP_INLINE_VISIBILITY string_type str(size_type __sub = 0) const - {return (*this)[__sub].str();} + { + _LIBCPP_ASSERT(ready(), "match_results::str() called when not ready"); + return (*this)[__sub].str(); + } _LIBCPP_INLINE_VISIBILITY const_reference operator[](size_type __n) const - {return __n < __matches_.size() ? __matches_[__n] : __unmatched_;} + { + _LIBCPP_ASSERT(ready(), "match_results::operator[]() called when not ready"); + return __n < __matches_.size() ? __matches_[__n] : __unmatched_; + } _LIBCPP_INLINE_VISIBILITY - const_reference prefix() const {return __prefix_;} + const_reference prefix() const + { + _LIBCPP_ASSERT(ready(), "match_results::prefix() called when not ready"); + return __prefix_; + } _LIBCPP_INLINE_VISIBILITY - const_reference suffix() const {return __suffix_;} + const_reference suffix() const + { + _LIBCPP_ASSERT(ready(), "match_results::suffix() called when not ready"); + return __suffix_; + } _LIBCPP_INLINE_VISIBILITY const_iterator begin() const {return empty() ? __matches_.end() : __matches_.begin();} @@ -5448,6 +5468,7 @@ match_results<_BidirectionalIterator, _Allocator>::format(_OutputIter __output_i const char_type* __fmt_first, const char_type* __fmt_last, regex_constants::match_flag_type __flags) const { + _LIBCPP_ASSERT(ready(), "match_results::format() called when not ready"); if (__flags & regex_constants::format_sed) { for (; __fmt_first != __fmt_last; ++__fmt_first) diff --git a/libcxx/test/std/re/re.results/re.results.all/get_allocator.pass.cpp b/libcxx/test/std/re/re.results/re.results.all/get_allocator.pass.cpp index f0dcd7b..33b5970 100644 --- a/libcxx/test/std/re/re.results/re.results.all/get_allocator.pass.cpp +++ b/libcxx/test/std/re/re.results/re.results.all/get_allocator.pass.cpp @@ -24,7 +24,7 @@ test(const Allocator& a) { std::match_results m(a); assert(m.size() == 0); - assert(m.str() == std::basic_string()); + assert(!m.ready()); assert(m.get_allocator() == a); } diff --git a/libcxx/test/std/re/re.results/re.results.const/allocator.pass.cpp b/libcxx/test/std/re/re.results/re.results.const/allocator.pass.cpp index 99ecb66..6599546 100644 --- a/libcxx/test/std/re/re.results/re.results.const/allocator.pass.cpp +++ b/libcxx/test/std/re/re.results/re.results.const/allocator.pass.cpp @@ -24,7 +24,7 @@ test(const Allocator& a) { std::match_results m(a); assert(m.size() == 0); - assert(m.str() == std::basic_string()); + assert(!m.ready()); assert(m.get_allocator() == a); } diff --git a/libcxx/test/std/re/re.results/re.results.const/copy.pass.cpp b/libcxx/test/std/re/re.results/re.results.const/copy.pass.cpp index a1dbea0..88b8093 100644 --- a/libcxx/test/std/re/re.results/re.results.const/copy.pass.cpp +++ b/libcxx/test/std/re/re.results/re.results.const/copy.pass.cpp @@ -26,7 +26,7 @@ test(const Allocator& a) SM m1(m0); assert(m1.size() == m0.size()); - assert(m1.str() == m0.str()); + assert(m1.ready() == m0.ready()); assert(m1.get_allocator() == m0.get_allocator()); } diff --git a/libcxx/test/std/re/re.results/re.results.const/copy_assign.pass.cpp b/libcxx/test/std/re/re.results/re.results.const/copy_assign.pass.cpp index 943037e..1b220df 100644 --- a/libcxx/test/std/re/re.results/re.results.const/copy_assign.pass.cpp +++ b/libcxx/test/std/re/re.results/re.results.const/copy_assign.pass.cpp @@ -27,7 +27,7 @@ test(const Allocator& a) m1 = m0; assert(m1.size() == m0.size()); - assert(m1.str() == m0.str()); + assert(m1.ready() == m0.ready()); if (std::allocator_traits::propagate_on_container_copy_assignment::value) assert(m1.get_allocator() == m0.get_allocator()); else diff --git a/libcxx/test/std/re/re.results/re.results.const/default.pass.cpp b/libcxx/test/std/re/re.results/re.results.const/default.pass.cpp index a70c344..783cd29 100644 --- a/libcxx/test/std/re/re.results/re.results.const/default.pass.cpp +++ b/libcxx/test/std/re/re.results/re.results.const/default.pass.cpp @@ -22,7 +22,7 @@ test() { std::match_results m; assert(m.size() == 0); - assert(m.str() == std::basic_string()); + assert(!m.ready()); assert(m.get_allocator() == std::allocator >()); } diff --git a/libcxx/test/std/re/re.results/re.results.const/move.pass.cpp b/libcxx/test/std/re/re.results/re.results.const/move.pass.cpp index 778e31b..eb292d3 100644 --- a/libcxx/test/std/re/re.results/re.results.const/move.pass.cpp +++ b/libcxx/test/std/re/re.results/re.results.const/move.pass.cpp @@ -31,7 +31,7 @@ test(const Allocator& a) SM m1(std::move(m0)); assert(m1.size() == 0); - assert(m1.str() == std::basic_string()); + assert(!m1.ready()); assert(m1.get_allocator() == a); } diff --git a/libcxx/test/std/re/re.results/re.results.const/move_assign.pass.cpp b/libcxx/test/std/re/re.results/re.results.const/move_assign.pass.cpp index 2a62af8..42393f1 100644 --- a/libcxx/test/std/re/re.results/re.results.const/move_assign.pass.cpp +++ b/libcxx/test/std/re/re.results/re.results.const/move_assign.pass.cpp @@ -28,7 +28,7 @@ test(const Allocator& a) m1 = std::move(m0); assert(m1.size() == 0); - assert(m1.str() == std::basic_string()); + assert(!m1.ready()); if (std::allocator_traits::propagate_on_container_move_assignment::value) assert(m1.get_allocator() == a); else