This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] PR libstdc++/85222 allow catching iostream errors as gcc4-compatible ios::failure
- From: Richard Biener <rguenther at suse dot de>
- To: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- Cc: libstdc++ <libstdc++ at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>, Michael Matz <matz at suse dot de>, Jakub Jelinek <jakub at redhat dot com>
- Date: Tue, 10 Apr 2018 09:42:01 +0200 (CEST)
- Subject: Re: [PATCH] PR libstdc++/85222 allow catching iostream errors as gcc4-compatible ios::failure
- References: <CAH6eHdQUaz7Gd5bjQEX1hpTBvtg2ugu+CbPEwJpuYX4KzH0vnQ@mail.gmail.com>
On Tue, 10 Apr 2018, Jonathan Wakely wrote:
> Define a new exception type derived from std::ios::failure[abi:cxx11]
> which also aggregates an object of the gcc4-compatible ios::failure
> type. Make __throw_ios_failure throw this new type for iostream errors
> that raise exceptions. Provide custom type info for the new type so that
> it can be caught by handlers for the gcc4-compatible ios::failure type
> as well as handlers for ios::failure[abi:cxx11] and its bases.
>
> PR libstdc++/85222
> * src/c++11/Makefile.am [ENABLE_DUAL_ABI]: Add special rules for
> cxx11-ios_failure.cc to rewrite type info for __ios_failure.
> * src/c++11/Makefile.in: Regenerate.
> * src/c++11/cxx11-ios_failure.cc (__ios_failure, __iosfail_type_info):
> New types.
> [_GLIBCXX_USE_DUAL_ABI] (__throw_ios_failure): Define here.
> * src/c++11/ios.cc (__throw_ios_failure): Remove definition.
> * src/c++98/ios_failure.cc (__construct_ios_failure)
> (__destroy_ios_failure, is_ios_failure_handler): New functions.
> [!_GLIBCXX_USE_DUAL_ABI] (__throw_ios_failure): Define here.
> * testsuite/27_io/ios_base/failure/dual_abi.cc: New.
> * testsuite/27_io/basic_ios/copyfmt/char/1.cc: Revert changes to
> handler types, to always catch std::ios_base::failure.
> * testsuite/27_io/basic_ios/exceptions/char/1.cc: Likewise.
> * testsuite/27_io/basic_istream/extractors_arithmetic/char/
> exceptions_failbit.cc: Likewise.
> * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/
> exceptions_failbit.cc: Likewise.
> * testsuite/27_io/basic_istream/extractors_other/char/
> exceptions_null.cc: Likewise.
> * testsuite/27_io/basic_istream/extractors_other/wchar_t/
> exceptions_null.cc: Likewise.
> * testsuite/27_io/basic_istream/sentry/char/12297.cc: Likewise.
> * testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc: Likewise.
> * testsuite/27_io/basic_ostream/inserters_other/char/
> exceptions_null.cc: Likewise.
> * testsuite/27_io/basic_ostream/inserters_other/wchar_t/
> exceptions_null.cc: Likewise.
> * testsuite/27_io/ios_base/storage/2.cc: Likewise.
>
> Tested x86_64-linux and powerpc64-linux, with the default config, and
> --disable-libstdcxx-dual-abi, and
> --with-default-libstdcxx-abi=gcc4-compatible. I intend to commit this
> to trunk and gcc-7-branch soon.
Thanks for working on this!
Richard.