aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Voutilainen <ville.voutilainen@gmail.com>2015-12-18 17:17:09 +0200
committerVille Voutilainen <ville@gcc.gnu.org>2015-12-18 17:17:09 +0200
commit03d5d0c353ce5a9d09354e38ac30b789842c91f9 (patch)
tree3a8a381d19ed873a3737382ce8497fdea199988f
parent15ab6f00bc3d5b60ab59205bc9e39d2b3e5273ca (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libstdc++-v3/src/c++11/ios.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base/storage/11584.cc8
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); }