Jakub noticed I got the exports wrong for std::regex_error.
Tested x86_64-linux, committed to trunk. Not planning to fix this on the 4.9 branch.
commit 33024aacc31cc7a1fdaba934952150fdc3db7e3f Author: Jonathan Wakely <jwak...@redhat.com> Date: Fri May 9 13:51:39 2014 +0100 * config/abi/pre/gnu.ver (GLIBCXX_3.4.20): Correct regex_error export. (GLIBCXX_3.4.21): Export base object constructor for regex_error. * acinclude.m4 (libtool_VERSION): Bump. * configure: Regenerate. * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.21 version. * testsuite/28_regex/regex_error/base.cc: New. diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index cbce2ae..55427cd 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -3353,7 +3353,7 @@ changequote([,])dnl fi # For libtool versioning info, format is CURRENT:REVISION:AGE -libtool_VERSION=6:20:0 +libtool_VERSION=6:21:0 # Everything parsed; figure out what files and settings to use. case $enable_symvers in diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 1625048..ed7a93f 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -1363,10 +1363,18 @@ GLIBCXX_3.4.20 { _ZSt24__throw_out_of_range_fmtPKcz; # std::regex_error::regex_error(std::regex_constants::error_type) - _ZNSt11regex_errorC[01]ENSt15regex_constants10error_typeE; + _ZNSt11regex_errorC1ENSt15regex_constants10error_typeE; } GLIBCXX_3.4.19; +GLIBCXX_3.4.21 { + + # std::regex_error::regex_error(std::regex_constants::error_type) + _ZNSt11regex_errorC2ENSt15regex_constants10error_typeE; + +} GLIBCXX_3.4.20; + + # Symbols in the support library (libsupc++) have their own tag. CXXABI_1.3 { diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index c481db6..925ff7c 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -77918,7 +77918,7 @@ $as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;} fi # For libtool versioning info, format is CURRENT:REVISION:AGE -libtool_VERSION=6:20:0 +libtool_VERSION=6:21:0 # Everything parsed; figure out what files and settings to use. case $enable_symvers in diff --git a/libstdc++-v3/testsuite/28_regex/regex_error/base.cc b/libstdc++-v3/testsuite/28_regex/regex_error/base.cc new file mode 100644 index 0000000..a7318af --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/regex_error/base.cc @@ -0,0 +1,32 @@ +// 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/>. + +// 28.6 [re.badexp] + +// { dg-options "-std=c++11" } + +#include <regex> + +struct re : std::regex_error +{ + re() : regex_error(std::regex_constants::error_stack) { } +}; + +int main() +{ + re r __attribute__((unused)); +} diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc index 39635cb..0699114 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc @@ -200,6 +200,7 @@ check_version(symbol& test, bool added) known_versions.push_back("GLIBCXX_3.4.18"); known_versions.push_back("GLIBCXX_3.4.19"); known_versions.push_back("GLIBCXX_3.4.20"); + known_versions.push_back("GLIBCXX_3.4.21"); known_versions.push_back("CXXABI_1.3"); known_versions.push_back("CXXABI_LDBL_1.3"); known_versions.push_back("CXXABI_1.3.1"); @@ -227,7 +228,7 @@ check_version(symbol& test, bool added) test.version_status = symbol::incompatible; // Check that added symbols are added in the latest pre-release version. - bool latestp = (test.version_name == "GLIBCXX_3.4.20" + bool latestp = (test.version_name == "GLIBCXX_3.4.21" || test.version_name == "CXXABI_1.3.9" || test.version_name == "CXXABI_TM_1"); if (added && !latestp)