diff options
author | Ville Voutilainen <ville.voutilainen@gmail.com> | 2015-12-18 17:17:09 +0200 |
---|---|---|
committer | Ville Voutilainen <ville@gcc.gnu.org> | 2015-12-18 17:17:09 +0200 |
commit | 03d5d0c353ce5a9d09354e38ac30b789842c91f9 (patch) | |
tree | 3a8a381d19ed873a3737382ce8497fdea199988f | |
parent | 15ab6f00bc3d5b60ab59205bc9e39d2b3e5273ca (diff) | |
download | gcc-03d5d0c353ce5a9d09354e38ac30b789842c91f9.zip gcc-03d5d0c353ce5a9d09354e38ac30b789842c91f9.tar.gz gcc-03d5d0c353ce5a9d09354e38ac30b789842c91f9.tar.bz2 |
re PR libstdc++/68276 (ios_base::_M_grow_words should use new (std::nothrow))
2015-12-18 Ville Voutilainen <ville.voutilainen@gmail.com>
PR libstdc++/68276
* src/c++11/ios.cc (_M_grow_words): Use nothrow new.
* testsuite/27_io/ios_base/storage/11584.cc: Adjust.
From-SVN: r231819
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/src/c++11/ios.cc | 5 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc | 8 |
3 files changed, 13 insertions, 7 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6a8fa76..a37878d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2015-12-18 Ville Voutilainen <ville.voutilainen@gmail.com> + + PR libstdc++/68276 + + * src/c++11/ios.cc (_M_grow_words): Use nothrow new. + * testsuite/27_io/ios_base/storage/11584.cc: Adjust. + 2015-12-18 Andris Pavenis <andris.pavenis@iki.fi> * config/os/djgpp/error_constants.h: update according to DJGPP errno diff --git a/libstdc++-v3/src/c++11/ios.cc b/libstdc++-v3/src/c++11/ios.cc index 4adc701..f701e61 100644 --- a/libstdc++-v3/src/c++11/ios.cc +++ b/libstdc++-v3/src/c++11/ios.cc @@ -121,9 +121,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__ix < numeric_limits<int>::max()) { __newsize = __ix + 1; - __try - { __words = new _Words[__newsize]; } - __catch(const std::bad_alloc&) + __words = new (std::nothrow) _Words[__newsize]; + if (!__words) { _M_streambuf_state |= badbit; if (_M_streambuf_state & _M_exception) diff --git a/libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc b/libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc index 0c80795..ae680c7 100644 --- a/libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc +++ b/libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc @@ -26,14 +26,14 @@ int new_fails; -void* operator new(std::size_t n) throw (std::bad_alloc) +void* operator new(std::size_t n, const std::nothrow_t&) throw() { if (new_fails) - throw std::bad_alloc(); + return 0; return malloc(n); } -void* operator new[] (std::size_t n) throw (std::bad_alloc) -{ return operator new(n); } +void* operator new[] (std::size_t n, const std::nothrow_t& ntt) throw() +{ return operator new(n, ntt); } void operator delete (void *p) throw() { free(p); } void operator delete[] (void *p) throw() { operator delete(p); } |