diff options
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/doc/html/manual/api.html | 4 | ||||
-rw-r--r-- | libstdc++-v3/doc/xml/manual/evolution.xml | 6 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/eh_personality.cc | 9 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/eh_ptr.cc | 3 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/eh_terminate.cc | 1 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/eh_throw.cc | 3 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/exception | 27 | ||||
-rw-r--r-- | libstdc++-v3/libsupc++/unwind-cxx.h | 8 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/18_support/exception_ptr/60612-unexpected.cc | 1 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/18_support/set_unexpected.cc | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/18_support/unexpected_handler.cc | 1 |
12 files changed, 52 insertions, 15 deletions
diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html index 376a4035fa6..32810788bf2 100644 --- a/libstdc++-v3/doc/html/manual/api.html +++ b/libstdc++-v3/doc/html/manual/api.html @@ -440,4 +440,8 @@ now defaults to zero. The <code class="function">std::random_shuffle</code> algorithms are deprecated for C++14 and later. The C++11 <code class="function">std::shuffle</code> algorithm can be used instead. +</p><p> +The <code class="function">std::unexpected</code> function and related typedef and +accessors for the unexpected handler are deprecated for C++11 and later. +Dynamic exception specifications should be replaced with <code class="code">noexcept</code>. </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
\ No newline at end of file diff --git a/libstdc++-v3/doc/xml/manual/evolution.xml b/libstdc++-v3/doc/xml/manual/evolution.xml index 59b71b04442..9aef84a0933 100644 --- a/libstdc++-v3/doc/xml/manual/evolution.xml +++ b/libstdc++-v3/doc/xml/manual/evolution.xml @@ -1027,6 +1027,12 @@ for C++14 and later. The C++11 <function>std::shuffle</function> algorithm can be used instead. </para> +<para> +The <function>std::unexpected</function> function and related typedef and +accessors for the unexpected handler are deprecated for C++11 and later. +Dynamic exception specifications should be replaced with <code>noexcept</code>. +</para> + </section> </section> diff --git a/libstdc++-v3/libsupc++/eh_personality.cc b/libstdc++-v3/libsupc++/eh_personality.cc index 33c3cc32fb5..edd5f6a1a77 100644 --- a/libstdc++-v3/libsupc++/eh_personality.cc +++ b/libstdc++-v3/libsupc++/eh_personality.cc @@ -673,10 +673,13 @@ PERSONALITY_FUNCTION (int version, std::terminate (); else if (handler_switch_value < 0) { - __try - { std::unexpected (); } - __catch(...) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + __try + { std::unexpected (); } + __catch(...) { std::terminate (); } +#pragma GCC diagnostic pop } } else diff --git a/libstdc++-v3/libsupc++/eh_ptr.cc b/libstdc++-v3/libsupc++/eh_ptr.cc index 5c4685606fe..9f47b666341 100644 --- a/libstdc++-v3/libsupc++/eh_ptr.cc +++ b/libstdc++-v3/libsupc++/eh_ptr.cc @@ -198,7 +198,10 @@ std::rethrow_exception(std::exception_ptr ep) dep->primaryException = obj; __gnu_cxx::__eh_atomic_inc (&eh->referenceCount); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" dep->unexpectedHandler = get_unexpected (); +#pragma GCC diagnostic pop dep->terminateHandler = get_terminate (); __GXX_INIT_DEPENDENT_EXCEPTION_CLASS(dep->unwindHeader.exception_class); dep->unwindHeader.exception_cleanup = __gxx_dependent_exception_cleanup; diff --git a/libstdc++-v3/libsupc++/eh_terminate.cc b/libstdc++-v3/libsupc++/eh_terminate.cc index af257b63369..a94f173bb2e 100644 --- a/libstdc++-v3/libsupc++/eh_terminate.cc +++ b/libstdc++-v3/libsupc++/eh_terminate.cc @@ -58,6 +58,7 @@ std::terminate () throw() __cxxabiv1::__terminate (get_terminate ()); } +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" void __cxxabiv1::__unexpected (std::unexpected_handler handler) { diff --git a/libstdc++-v3/libsupc++/eh_throw.cc b/libstdc++-v3/libsupc++/eh_throw.cc index 765a6c18cca..51cbbc902c2 100644 --- a/libstdc++-v3/libsupc++/eh_throw.cc +++ b/libstdc++-v3/libsupc++/eh_throw.cc @@ -63,7 +63,10 @@ _GLIBCXX_NOTHROW header->referenceCount = 0; header->exc.exceptionType = tinfo; header->exc.exceptionDestructor = dest; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" header->exc.unexpectedHandler = std::get_unexpected (); +#pragma GCC diagnostic pop header->exc.terminateHandler = std::get_terminate (); __GXX_INIT_PRIMARY_EXCEPTION_CLASS(header->exc.unwindHeader.exception_class); header->exc.unwindHeader.exception_cleanup = __gxx_exception_cleanup; diff --git a/libstdc++-v3/libsupc++/exception b/libstdc++-v3/libsupc++/exception index a023e22ea89..5088681e1eb 100644 --- a/libstdc++-v3/libsupc++/exception +++ b/libstdc++-v3/libsupc++/exception @@ -67,9 +67,6 @@ namespace std /// If you write a replacement %terminate handler, it must be of this type. typedef void (*terminate_handler) (); - /// If you write a replacement %unexpected handler, it must be of this type. - typedef void (*unexpected_handler) (); - /// Takes a new handler function as an argument, returns the old function. terminate_handler set_terminate(terminate_handler) _GLIBCXX_USE_NOEXCEPT; @@ -82,17 +79,35 @@ namespace std * abandoned for any reason. It can also be called by the user. */ void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__)); - /// Takes a new handler function as an argument, returns the old function. +#if __cplusplus < 201703L || _GLIBCXX_USE_DEPRECATED + /// If you write a replacement %unexpected handler, it must be of this type. + typedef void (*_GLIBCXX11_DEPRECATED unexpected_handler) (); + + /** Takes a new handler function as an argument, returns the old function. + * + * @deprecated Removed from the C++ standard in C++17 + */ + _GLIBCXX11_DEPRECATED unexpected_handler set_unexpected(unexpected_handler) _GLIBCXX_USE_NOEXCEPT; #if __cplusplus >= 201103L - /// Return the current unexpected handler. + /** Return the current unexpected handler. + * + * @since C++11 + * @deprecated Removed from the C++ standard in C++17 + */ + _GLIBCXX11_DEPRECATED unexpected_handler get_unexpected() noexcept; #endif /** The runtime will call this function if an %exception is thrown which - * violates the function's %exception specification. */ + * violates the function's %exception specification. + * + * @deprecated Removed from the C++ standard in C++17 + */ + _GLIBCXX11_DEPRECATED void unexpected() __attribute__ ((__noreturn__)); +#endif /** [18.6.4]/1: 'Returns true after completing evaluation of a * throw-expression until either completing initialization of the diff --git a/libstdc++-v3/libsupc++/unwind-cxx.h b/libstdc++-v3/libsupc++/unwind-cxx.h index 65fd5303b2b..96d50eae412 100644 --- a/libstdc++-v3/libsupc++/unwind-cxx.h +++ b/libstdc++-v3/libsupc++/unwind-cxx.h @@ -67,7 +67,7 @@ struct __cxa_exception // The C++ standard has entertaining rules wrt calling set_terminate // and set_unexpected in the middle of the exception cleanup process. - std::unexpected_handler unexpectedHandler; + std::terminate_handler unexpectedHandler; std::terminate_handler terminateHandler; // The caught exception stack threads through here. @@ -121,7 +121,7 @@ struct __cxa_dependent_exception // The C++ standard has entertaining rules wrt calling set_terminate // and set_unexpected in the middle of the exception cleanup process. - std::unexpected_handler unexpectedHandler; + std::terminate_handler unexpectedHandler; std::terminate_handler terminateHandler; // The caught exception stack threads through here. @@ -191,12 +191,12 @@ extern "C" void __cxa_tm_cleanup (void *, void *, unsigned int) throw(); // so inconsiderate as to return. extern void __terminate(std::terminate_handler) throw () __attribute__((__noreturn__)); -extern void __unexpected(std::unexpected_handler) +extern void __unexpected(std::terminate_handler) __attribute__((__noreturn__)); // The current installed user handlers. extern std::terminate_handler __terminate_handler; -extern std::unexpected_handler __unexpected_handler; +extern std::terminate_handler __unexpected_handler; // These are explicitly GNU C++ specific. diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/60612-unexpected.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/60612-unexpected.cc index 600ccb5698f..18bd1fe4f0d 100644 --- a/libstdc++-v3/testsuite/18_support/exception_ptr/60612-unexpected.cc +++ b/libstdc++-v3/testsuite/18_support/exception_ptr/60612-unexpected.cc @@ -1,3 +1,4 @@ +// { dg-options "-Wno-deprecated-declarations" } // { dg-do run { target { c++11_only || c++14_only } } } // Copyright (C) 2014-2021 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc b/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc index 2f0bae4be0a..de35ec4c0e0 100644 --- a/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc +++ b/libstdc++-v3/testsuite/18_support/headers/exception/synopsis.cc @@ -24,7 +24,7 @@ namespace std { class bad_exception; typedef void (*unexpected_handler)(); - unexpected_handler set_unexpected(unexpected_handler f ) throw(); + unexpected_handler set_unexpected(unexpected_handler f ) throw(); // { dg-warning "deprecated" { target c++11 } } unexpected_handler get_unexpected() noexcept; void unexpected(); diff --git a/libstdc++-v3/testsuite/18_support/set_unexpected.cc b/libstdc++-v3/testsuite/18_support/set_unexpected.cc index 3f38431626d..6cedc7d6cd1 100644 --- a/libstdc++-v3/testsuite/18_support/set_unexpected.cc +++ b/libstdc++-v3/testsuite/18_support/set_unexpected.cc @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-options "-std=gnu++11" } +// { dg-options "-std=gnu++11 -Wno-deprecated-declarations" } // { dg-do run { target { c++11_only || c++14_only } } } #include <exception> diff --git a/libstdc++-v3/testsuite/18_support/unexpected_handler.cc b/libstdc++-v3/testsuite/18_support/unexpected_handler.cc index 509bb5c31cd..551b0e7f371 100644 --- a/libstdc++-v3/testsuite/18_support/unexpected_handler.cc +++ b/libstdc++-v3/testsuite/18_support/unexpected_handler.cc @@ -15,6 +15,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. +// { dg-options "-Wno-deprecated-declarations" } // { dg-do run { target c++11 } } // D.11 Violating exception-specifications |