diff options
author | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-04-03 00:08:54 +0000 |
---|---|---|
committer | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-04-03 00:08:54 +0000 |
commit | a366a1d39800dd1c8d89eaf8b1247866b90b59f1 (patch) | |
tree | 41b23a61903b4ffa760fefd1e9f216e33e089932 /libstdc++-v3/testsuite | |
parent | 3ca21885bf62d811e364fc478a44da09652a3bc7 (diff) | |
download | gcc-a366a1d39800dd1c8d89eaf8b1247866b90b59f1.tar.gz |
* libsupc++/exception (get_terminate(), get_unexpected()): Declare.
* libsupc++/eh_terminate.cc (get_terminate() , set_unexpected()):
Define.
(set_terminate(terminate_handler)): Set atomically.
(set_unexpected(terminate_handler)): Likewise.
* libsupc++/new (get_new_handler()): Declare.
* libsupc++/new_handler.cc (get_new_handler()): Define.
(set_new_handler(new_handler)): Set atomically.
(__new_handler): Use internal linkage.
* libsupc++/new_op.cc (operator new): Use get_new_handler().
* libsupc++/new_opnt.cc (operator new): Likewise.
* acinclude.m4: Bump libtool_VERSION to 6:19:0.
* configure: Regenerate.
* libsupc++/Makefile.am: Compile above files with -std=gnu++11.
* libsupc++/Makefile.in: Regenerate.
* config/abi/pre/gnu.ver: Add new exports.
* doc/xml/manual/status_cxx2011.xml: Update.
* testsuite/18_support/headers/exception/synopsis.cc: Check accessors
for handlers.
* testsuite/18_support/headers/new/synopsis.cc: Likewise.
* testsuite/18_support/new_handler.cc: New.
* testsuite/18_support/terminate_handler.cc: New.
* testsuite/18_support/unexpected_handler.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@197380 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/testsuite')
5 files changed, 124 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc b/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc index 3a417b2ab29..acbd8327e80 100644 --- a/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc +++ b/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc @@ -1,4 +1,5 @@ // { dg-do compile } +// { dg-options "-std=gnu++11" } // Copyright (C) 2007-2013 Free Software Foundation, Inc. // @@ -25,10 +26,12 @@ namespace std { typedef void (*unexpected_handler)(); unexpected_handler set_unexpected(unexpected_handler f ) throw(); + unexpected_handler get_unexpected() noexcept; void unexpected(); typedef void (*terminate_handler)(); terminate_handler set_terminate(terminate_handler f ) throw(); + terminate_handler get_terminate() noexcept; void terminate() throw(); bool uncaught_exception() throw(); diff --git a/libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc b/libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc index 47d8f15e317..8ce8992947a 100644 --- a/libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc +++ b/libstdc++-v3/testsuite/18_support/headers/new/synopsis.cc @@ -1,4 +1,5 @@ // { dg-do compile } +// { dg-options "-std=gnu++11" } // Copyright (C) 2007-2013 Free Software Foundation, Inc. // @@ -25,6 +26,7 @@ namespace std { extern const nothrow_t nothrow; typedef void (*new_handler)(); new_handler set_new_handler(new_handler new_p) throw(); + new_handler get_new_handler() noexcept; } void* operator new(std::size_t size) throw(std::bad_alloc); diff --git a/libstdc++-v3/testsuite/18_support/new_handler.cc b/libstdc++-v3/testsuite/18_support/new_handler.cc new file mode 100644 index 00000000000..97cb61e0577 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/new_handler.cc @@ -0,0 +1,39 @@ +// Copyright (C) 2013 Free Software Foundation +// +// 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/>. + +// { dg-options "-std=gnu++11" } + +// 18.6.2 Storage allocation errors + +#include <new> +#include <testsuite_hooks.h> + +void handler() { throw std::bad_alloc(); } + +void test01() +{ + auto prev = std::set_new_handler(handler); + VERIFY( prev == nullptr ); + auto curr = std::get_new_handler(); + VERIFY( curr == handler ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/terminate_handler.cc b/libstdc++-v3/testsuite/18_support/terminate_handler.cc new file mode 100644 index 00000000000..f3112b19fdb --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/terminate_handler.cc @@ -0,0 +1,40 @@ +// Copyright (C) 2013 Free Software Foundation +// +// 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/>. + +// { dg-options "-std=gnu++11" } + +// 18.8.3 Abnormal termination + +#include <exception> +#include <cstdlib> +#include <testsuite_hooks.h> + +void handler() { std::abort(); } + +void test01() +{ + auto prev = std::set_terminate(handler); + VERIFY( prev != handler ); + auto curr = std::get_terminate(); + VERIFY( curr == handler ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/18_support/unexpected_handler.cc b/libstdc++-v3/testsuite/18_support/unexpected_handler.cc new file mode 100644 index 00000000000..f5a92501289 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/unexpected_handler.cc @@ -0,0 +1,40 @@ +// Copyright (C) 2013 Free Software Foundation +// +// 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/>. + +// { dg-options "-std=gnu++11" } + +// D.11 Violating exception-specifications + +#include <exception> +#include <cstdlib> +#include <testsuite_hooks.h> + +void handler() { std::abort(); } + +void test01() +{ + auto prev = std::set_unexpected(handler); + VERIFY( prev != handler ); + auto curr = std::get_unexpected(); + VERIFY( curr == handler ); +} + +int main() +{ + test01(); + return 0; +} |