diff options
author | Tim Shen <timshen@google.com> | 2014-09-25 04:43:19 +0000 |
---|---|---|
committer | Tim Shen <timshen@gcc.gnu.org> | 2014-09-25 04:43:19 +0000 |
commit | 2bde8cac3724cd02c8114275f5c4688f25558859 (patch) | |
tree | 4794d1c6345fb4cf7144353f372fc2b99920c7a9 /libstdc++-v3/testsuite/28_regex | |
parent | 21a9ce6e0e7d79661b0f3d46623e3027a5860765 (diff) | |
download | gcc-2bde8cac3724cd02c8114275f5c4688f25558859.zip gcc-2bde8cac3724cd02c8114275f5c4688f25558859.tar.gz gcc-2bde8cac3724cd02c8114275f5c4688f25558859.tar.bz2 |
re PR libstdc++/63199 (Inserting std::wregex to std::vector loses some std::wregex values)
PR libstdc++/63199
* include/bits/regex.h (basic_regex::basic_regex, basic_regex::assign,
basic_regex::imbue, basic_regex::getloc, basic_regex::swap): Add
_M_loc for basic_regex.
* include/bits/regex_automaton.h: Add _M_traits for _NFA.
* include/bits/regex_compiler.h (_Compiler::_M_get_nfa, __compile_nfa):
Make _Compiler::_M_nfa heap allocated.
* include/bits/regex_compiler.tcc (_Compiler::_Compiler): Make
_Compiler::_M_nfa heap allocated.
* include/bits/regex_executor.h (_Executor::_M_is_word):
Fix accessing _M_traits.
* include/bits/regex_executor.tcc (_Executor::_M_dfs):
Fix accessing _M_traits.
* testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/63199.cc:
New testcase.
From-SVN: r215578
Diffstat (limited to 'libstdc++-v3/testsuite/28_regex')
-rw-r--r-- | libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/63199.cc | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/63199.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/63199.cc new file mode 100644 index 0000000..cbb23f7 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/63199.cc @@ -0,0 +1,69 @@ +// { 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++/63199 +void +test01() +{ + bool test __attribute__((unused)) = true; + + std::setlocale(LC_ALL, ""); + + std::wstring current_token(L"II."); + + std::vector<std::wregex> regex_vector; + + for (int i = 0; i < 4; ++i) + { + std::regex_constants::syntax_option_type flag; + flag = std::regex_constants::ECMAScript | std::regex_constants::icase; + + std::wregex reg; + reg.imbue(std::locale("")); + reg.assign(L"^(M*(?:CM|DC{1,3}|D|CD|C{1,3}){0,1}(?:XC|LX{1,3}|L|XL|X{1,3}){0,1}(?:IX|VI{0,3}|IV|I{1,3}){0,1}\\.)$", flag); + + regex_vector.emplace_back(reg); + } + + for (auto cit = regex_vector.cbegin(); cit != regex_vector.cend(); ++cit) + { + std::wstring::const_iterator it1 = current_token.begin(); + std::wstring::const_iterator it2 = current_token.end(); + std::wsmatch current_token_match; + + regex_match_debug(it1, it2, current_token_match, *cit); + VERIFY(current_token_match[0] == current_token); + VERIFY(current_token_match[1] == current_token); + } +} + +int +main() +{ + test01(); + return 0; +} |