diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2016-10-21 14:21:09 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2016-10-21 14:21:09 +0100 |
commit | 6652a944dcf82fe518090e8cb2629b473b70ac5c (patch) | |
tree | 9ff9e06648dbe30297d09417ea75f48225804408 | |
parent | de514d407ef8af0b0ba377d8934348702cf87d05 (diff) | |
download | gcc-6652a944dcf82fe518090e8cb2629b473b70ac5c.zip gcc-6652a944dcf82fe518090e8cb2629b473b70ac5c.tar.gz gcc-6652a944dcf82fe518090e8cb2629b473b70ac5c.tar.bz2 |
Use global operator new in std::make_exception_ptr
* libsupc++/exception_ptr.h (make_exception_ptr): Qualify new.
* testsuite/18_support/exception_ptr/make_exception_ptr_2.cc: New
test.
From-SVN: r241404
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/exception_ptr.h | 8 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr_2.cc | 43 |
3 files changed, 53 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6f47e0d..933d8d3 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2016-10-21 Jonathan Wakely <jwakely@redhat.com> + + * libsupc++/exception_ptr.h (make_exception_ptr): Qualify new. + * testsuite/18_support/exception_ptr/make_exception_ptr_2.cc: New + test. + 2016-10-20 Jonathan Wakely <jwakely@redhat.com> * include/backward/auto_ptr.h (__shared_ptr(auto_ptr&&)) diff --git a/libstdc++-v3/libsupc++/exception_ptr.h b/libstdc++-v3/libsupc++/exception_ptr.h index 21e4e8b..a47a585 100644 --- a/libstdc++-v3/libsupc++/exception_ptr.h +++ b/libstdc++-v3/libsupc++/exception_ptr.h @@ -187,10 +187,10 @@ namespace std { #if __cpp_rtti && !_GLIBCXX_HAVE_CDTOR_CALLABI void *__e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); - (void)__cxxabiv1::__cxa_init_primary_exception(__e, - const_cast<std::type_info*>(&typeid(__ex)), - __exception_ptr::__dest_thunk<_Ex>); - new (__e) _Ex(__ex); + (void)__cxxabiv1::__cxa_init_primary_exception( + __e, const_cast<std::type_info*>(&typeid(__ex)), + __exception_ptr::__dest_thunk<_Ex>); + ::new (__e) _Ex(__ex); return exception_ptr(__e); #else throw __ex; diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr_2.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr_2.cc new file mode 100644 index 0000000..3787777 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/make_exception_ptr_2.cc @@ -0,0 +1,43 @@ +// { dg-do run { target c++11 } } +// { dg-require-atomic-builtins "" } + +// Copyright (C) 2010-2016 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <exception> +#include <testsuite_hooks.h> + +// https://gcc.gnu.org/ml/libstdc++/2016-10/msg00139.html + +struct E { + void* operator new(std::size_t) = delete; +}; + +void test01() +{ + E e; + std::exception_ptr p = std::make_exception_ptr(e); + + VERIFY( p ); +} + +int main() +{ + test01(); + + return 0; +} |