aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/src/compatibility.cc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2007-05-07 21:27:54 +0000
committerJason Merrill <jason@redhat.com>2007-05-07 21:27:54 +0000
commit12236ed60f70d664a0227df990f4822daab38f96 (patch)
treec30258339d2a08a69bc22ef35afceb0e8fe1957c /libstdc++-v3/src/compatibility.cc
parentc29b734a47f4fa29ac09c648d7579130419aa9b1 (diff)
PR c++/28145
* libsupc++/cxxabi.h (__forced_unwind, __foreign_exception): New classes. * libsupc++/eh_exception.cc: Define their destructors. * config/abi/pre/gnu.ver: Export their type_infos. * config/abi/pre/gnu-versioned-namespace.ver: Likewise. * libsupc++/eh_personality.cc: A handler for abi::__forced_unwind matches a forced unwind, and a handler for abi::__foreign_exception matches a foreign exception. * include/bits/istream.tcc: Rethrow forced unwind. * include/bits/ostream.tcc: Likewise. * include/bits/ostream_insert.h: Likewise. * include/bits/basic_string.tcc (operator>>, getline): Likewise. * include/bits/fstream.tcc (basic_filebuf::close): Likewise. * include/ext/vstring.cc (operator>>, getline): Likewise. * src/istream.cc: Likewise. * src/compatibility.cc (basic_istream::ignore): Likewise. * include/std/bitset (operator>>): Likewise. * include/std/fstream (basic_filebuf::close): Remove throw() spec. * libsupc++/cxxabi-internal.h: Split out from... * libsupc++/cxxabi.h: ...here. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@124517 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/src/compatibility.cc')
-rw-r--r--libstdc++-v3/src/compatibility.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/libstdc++-v3/src/compatibility.cc b/libstdc++-v3/src/compatibility.cc
index 83b20b96706..b29040c429a 100644
--- a/libstdc++-v3/src/compatibility.cc
+++ b/libstdc++-v3/src/compatibility.cc
@@ -114,6 +114,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
if (traits_type::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
}
+ catch(__cxxabiv1::__forced_unwind&)
+ {
+ this->_M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
@@ -180,6 +185,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
if (traits_type::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
}
+ catch(__cxxabiv1::__forced_unwind&)
+ {
+ this->_M_setstate(ios_base::badbit);
+ __throw_exception_again;
+ }
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)