The following allows people configuring the gcc-4 compatible ABI
as the default ABI to retain compatibility with old programs
catching ios_base::failure by matching the abi version thrown
to the configured default ABI.

This doesn't really fix the PR but it makes behavior between
the dual-ABI with default gcc-4 compatible consistent with that
of the non-dual-ABI which is what I had expected.

Whether an ABI break is really desired for the case of a c++11
default ABI is still questionable and any programs that differ
from the default ABI choice will now be broken (compared to
those differing from c++11).

Bootstrapped on x86_64-unknown-linux-gnu, ok for trunk?  Ok for
the GCC 7 branch?

I'm not sure if we want to revert r245167 after this?  I'm
re-running the testsuite with a gcc4-compatible ABI right now.
At least with a "real" fix we should be able to run the affected
tests twice, once with the new and once with the old ABI.

Thanks,
Richard.

2018-04-06  Richard Biener  <rguent...@suse.de>

        PR libstdc++/85222
        * src/c++11/ios.cc: Remove hard define of _GLIBCXX_USE_CXX11_ABI to 1.
        Instead use the configured default ABI to decide the ABI version
        of ios_base::failure thrown by __throw_ios_failure.

Index: libstdc++-v3/src/c++11/ios.cc
===================================================================
--- libstdc++-v3/src/c++11/ios.cc       (revision 258812)
+++ libstdc++-v3/src/c++11/ios.cc       (working copy)
@@ -26,9 +26,8 @@
 // ISO C++ 14882: 27.4  Iostreams base classes
 //
 
-// Determines the version of ios_base::failure thrown by __throw_ios_failure.
-// If !_GLIBCXX_USE_DUAL_ABI this will get undefined automatically.
-#define _GLIBCXX_USE_CXX11_ABI 1
+// The ABI version of ios_base::failure thrown by __throw_ios_failure
+// is determined by the default ABI version choosed at configure time
 
 #include <ios>
 #include <limits>

Reply via email to