From f32fd5aaecb0673c9cdaf5a4f8fe6bbe1e9049a7 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 30 Dec 2011 11:40:37 +0000 Subject: [PATCH] re PR libstdc++/51711 (regex.h contains incorrect code) 2011-12-30 Paolo Carlini PR libstdc++/51711 * include/bits/regex.h (regex_replace): Fix thinko. * testsuite/28_regex/algorithms/regex_replace/char/51711.cc: New. * testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc: Likewise. From-SVN: r182740 --- libstdc++-v3/ChangeLog | 8 +++++ libstdc++-v3/include/bits/regex.h | 2 +- .../algorithms/regex_replace/char/51711.cc | 31 +++++++++++++++++++ .../algorithms/regex_replace/wchar_t/51711.cc | 31 +++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc create mode 100644 libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7a35a3aa104..09615cb38c4 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2011-12-30 Paolo Carlini + + PR libstdc++/51711 + * include/bits/regex.h (regex_replace): Fix thinko. + * testsuite/28_regex/algorithms/regex_replace/char/51711.cc: New. + * testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc: + Likewise. + 2011-12-29 Paolo Carlini * include/bits/hashtable_policy.h (struct _Ebo_helper<>): Don't use diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h index 645011df686..4c496653cb8 100644 --- a/libstdc++-v3/include/bits/regex.h +++ b/libstdc++-v3/include/bits/regex.h @@ -2223,7 +2223,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION regex_constants::match_flag_type __flags = regex_constants::match_default) { - std::string __result; + basic_string<_Ch_type> __result; regex_replace(std::back_inserter(__result), __s.begin(), __s.end(), __e, __fmt, __flags); return __result; diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc new file mode 100644 index 00000000000..5532713cea7 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/char/51711.cc @@ -0,0 +1,31 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 2011 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 +// . +// + +#include +#include + +// libstdc++/51711 +void test01() +{ + std::string toProcess("Bug\r\n"); + std::string result __attribute__((unused)) + = std::regex_replace(toProcess, std::regex("\\r"), std::string("\\r")); +} diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc new file mode 100644 index 00000000000..66b74e45867 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_replace/wchar_t/51711.cc @@ -0,0 +1,31 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 2011 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 +// . +// + +#include +#include + +// libstdc++/51711 +void test01() +{ + std::wstring toProcess(L"Bug\r\n"); + std::wstring result __attribute__((unused)) + = std::regex_replace(toProcess, std::wregex(L"\\r"), std::wstring(L"\\r")); +}