forked from OSchip/llvm-project
Fix a bug in regex_Iterator where it would report zero-length matches forever. Reported as http://llvm.org/PR33681. Thanks to Karen Arutyunov for the report.
llvm-svn: 307171
This commit is contained in:
parent
c40ca13519
commit
52f4f72fa9
|
@ -6142,7 +6142,7 @@ regex_iterator<_BidirectionalIterator, _CharT, _Traits>::operator++()
|
|||
{
|
||||
__flags_ |= regex_constants::__no_update_pos;
|
||||
_BidirectionalIterator __start = __match_[0].second;
|
||||
if (__match_.empty())
|
||||
if (__match_[0].first == __match_[0].second)
|
||||
{
|
||||
if (__start == __end_)
|
||||
{
|
||||
|
|
|
@ -95,4 +95,22 @@ int main()
|
|||
assert((*i2).position() == 0);
|
||||
assert((*i2).str() == "555-1234");
|
||||
}
|
||||
{ // http://llvm.org/PR33681
|
||||
std::regex rex(".*");
|
||||
const char foo[] = "foo";
|
||||
// The -1 is because we don't want the implicit null from the array.
|
||||
std::cregex_iterator i(std::begin(foo), std::end(foo) - 1, rex);
|
||||
std::cregex_iterator e;
|
||||
assert(i != e);
|
||||
assert((*i).size() == 1);
|
||||
assert((*i).str() == "foo");
|
||||
|
||||
++i;
|
||||
assert(i != e);
|
||||
assert((*i).size() == 1);
|
||||
assert((*i).str() == "");
|
||||
|
||||
++i;
|
||||
assert(i == e);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue