commit 5fdfa3c31049d0e1ef5166f148e9ac4906bc490a Author: timshen Date: Sun Jul 6 01:40:32 2014 -0700 PR libstdc++/61720 * include/bits/regex_executor.tcc (_Executor<>::_M_main_dispatch): Clear match queue for next use. * testsuite/28_regex/general_testcases.cc: New file for general testcases. diff --git a/libstdc++-v3/include/bits/regex_executor.tcc b/libstdc++-v3/include/bits/regex_executor.tcc index 38b8ff2..3c68668 100644 --- a/libstdc++-v3/include/bits/regex_executor.tcc +++ b/libstdc++-v3/include/bits/regex_executor.tcc @@ -137,6 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } if (__match_mode == _Match_mode::_Exact) __ret = _M_has_sol; + _M_states._M_match_queue.clear(); return __ret; } diff --git a/libstdc++-v3/testsuite/28_regex/general_testcases.cc b/libstdc++-v3/testsuite/28_regex/general_testcases.cc new file mode 100644 index 0000000..c7372ab --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/general_testcases.cc @@ -0,0 +1,53 @@ +// { dg-options "-std=gnu++11" } + +// +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// This file is for general testcases in regex. +// We use a single file for multiple testcases because it takes too long to +// compile regex for each testcase in a single file. +// Normal testcases in other files should be moved into this file in the future. + +#include +#include +#include + +using namespace __gnu_test; +using namespace std; + +// libstdc++/61720 +void +PR61720() +{ + bool test __attribute__((unused)) = true; + + string test = R"("test\")"; + VERIFY(!regex_search_debug(test, regex(R"("([^"]|\\")*[^\\]")"))); + VERIFY(!regex_match_debug(test, regex(R"("([^"]|\\")*[^\\]")"))); + VERIFY(!regex_search_debug(test, regex(R"("([^"]|\\")*[^\\]")", + regex_constants::extended))); + VERIFY(!regex_match_debug(test, regex(R"("([^"]|\\")*[^\\]")", + regex_constants::extended))); +} + +int +main() +{ + PR61720(); + return 0; +}