On Wed, Jul 9, 2014 at 1:23 AM, Jonathan Wakely <jwak...@redhat.com> wrote: > I can't actually reproduce the bug with trunk.
It's a BFS executor bug, so we need to #define _GLIBCXX_REGEX_USE_THOMPSON_NFA (or use regex_search_debug instead) and use styles other than ECMAScript. I didn't notice that it's not a good idea to move all testcases in a file because of multiple cores, sorry. Here's the sane patch :) -- Regards, Tim Shen
commit 24ddf3614bb793b24a3951fa09ab323909b578a7 Author: timshen <tims...@google.com> 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/algorithms/regex_search/61720.cc: New file. 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/algorithms/regex_search/61720.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61720.cc new file mode 100644 index 0000000..15f4fd6 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/61720.cc @@ -0,0 +1,48 @@ +// { 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 +// <http://www.gnu.org/licenses/>. + +#include <regex> +#include <testsuite_hooks.h> +#include <testsuite_regex.h> + +using namespace __gnu_test; +using namespace std; + +// libstdc++/61720 +void +test01() +{ + bool test __attribute__((unused)) = true; + + string s = R"("test\")"; + VERIFY(!regex_search_debug(s, regex(R"("([^"]|\\")*[^\\]")"))); + VERIFY(!regex_match_debug(s, regex(R"("([^"]|\\")*[^\\]")"))); + VERIFY(!regex_search_debug(s, regex(R"("([^"]|\\")*[^\\]")", + regex_constants::extended))); + VERIFY(!regex_match_debug(s, regex(R"("([^"]|\\")*[^\\]")", + regex_constants::extended))); +} + +int +main() +{ + test01(); + return 0; +}