Line data Source code
1 : // Exception Handling support header for -*- C++ -*- 2 : 3 : // Copyright (C) 1995-2019 Free Software Foundation, Inc. 4 : // 5 : // This file is part of GCC. 6 : // 7 : // GCC is free software; you can redistribute it and/or modify 8 : // it under the terms of the GNU General Public License as published by 9 : // the Free Software Foundation; either version 3, or (at your option) 10 : // any later version. 11 : // 12 : // GCC is distributed in the hope that it will be useful, 13 : // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 : // GNU General Public License for more details. 16 : // 17 : // Under Section 7 of GPL version 3, you are granted additional 18 : // permissions described in the GCC Runtime Library Exception, version 19 : // 3.1, as published by the Free Software Foundation. 20 : 21 : // You should have received a copy of the GNU General Public License and 22 : // a copy of the GCC Runtime Library Exception along with this program; 23 : // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24 : // <http://www.gnu.org/licenses/>. 25 : 26 : /** @file exception 27 : * This is a Standard C++ Library header. 28 : */ 29 : 30 : #ifndef __EXCEPTION__ 31 : #define __EXCEPTION__ 32 : 33 : #pragma GCC system_header 34 : 35 : #pragma GCC visibility push(default) 36 : 37 : #include <bits/c++config.h> 38 : #include <bits/exception.h> 39 : 40 : extern "C++" { 41 : 42 : namespace std 43 : { 44 : /** If an %exception is thrown which is not listed in a function's 45 : * %exception specification, one of these may be thrown. */ 46 0 : class bad_exception : public exception 47 : { 48 : public: 49 0 : bad_exception() _GLIBCXX_USE_NOEXCEPT { } 50 : 51 : // This declaration is not useless: 52 : // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 53 : virtual ~bad_exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_USE_NOEXCEPT; 54 : 55 : // See comment in eh_exception.cc. 56 : virtual const char* 57 : what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_USE_NOEXCEPT; 58 : }; 59 : 60 : /// If you write a replacement %terminate handler, it must be of this type. 61 : typedef void (*terminate_handler) (); 62 : 63 : /// If you write a replacement %unexpected handler, it must be of this type. 64 : typedef void (*unexpected_handler) (); 65 : 66 : /// Takes a new handler function as an argument, returns the old function. 67 : terminate_handler set_terminate(terminate_handler) _GLIBCXX_USE_NOEXCEPT; 68 : 69 : #if __cplusplus >= 201103L 70 : /// Return the current terminate handler. 71 : terminate_handler get_terminate() noexcept; 72 : #endif 73 : 74 : /** The runtime will call this function if %exception handling must be 75 : * abandoned for any reason. It can also be called by the user. */ 76 : void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__)); 77 : 78 : /// Takes a new handler function as an argument, returns the old function. 79 : unexpected_handler set_unexpected(unexpected_handler) _GLIBCXX_USE_NOEXCEPT; 80 : 81 : #if __cplusplus >= 201103L 82 : /// Return the current unexpected handler. 83 : unexpected_handler get_unexpected() noexcept; 84 : #endif 85 : 86 : /** The runtime will call this function if an %exception is thrown which 87 : * violates the function's %exception specification. */ 88 : void unexpected() __attribute__ ((__noreturn__)); 89 : 90 : /** [18.6.4]/1: 'Returns true after completing evaluation of a 91 : * throw-expression until either completing initialization of the 92 : * exception-declaration in the matching handler or entering @c unexpected() 93 : * due to the throw; or after entering @c terminate() for any reason 94 : * other than an explicit call to @c terminate(). [Note: This includes 95 : * stack unwinding [15.2]. end note]' 96 : * 97 : * 2: 'When @c uncaught_exception() is true, throwing an 98 : * %exception can result in a call of @c terminate() 99 : * (15.5.1).' 100 : */ 101 : _GLIBCXX17_DEPRECATED 102 : bool uncaught_exception() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); 103 : 104 : #if __cplusplus >= 201703L || !defined(__STRICT_ANSI__) // c++17 or gnu++98 105 : #define __cpp_lib_uncaught_exceptions 201411L 106 : /// The number of uncaught exceptions. 107 : int uncaught_exceptions() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__)); 108 : #endif 109 : 110 : /// @} group exceptions 111 : } // namespace std 112 : 113 : namespace __gnu_cxx 114 : { 115 : _GLIBCXX_BEGIN_NAMESPACE_VERSION 116 : 117 : /** 118 : * @brief A replacement for the standard terminate_handler which 119 : * prints more information about the terminating exception (if any) 120 : * on stderr. 121 : * 122 : * @ingroup exceptions 123 : * 124 : * Call 125 : * @code 126 : * std::set_terminate(__gnu_cxx::__verbose_terminate_handler) 127 : * @endcode 128 : * to use. For more info, see 129 : * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt02ch06s02.html 130 : * 131 : * In 3.4 and later, this is on by default. 132 : */ 133 : void __verbose_terminate_handler(); 134 : 135 : _GLIBCXX_END_NAMESPACE_VERSION 136 : } // namespace 137 : 138 : } // extern "C++" 139 : 140 : #pragma GCC visibility pop 141 : 142 : #if (__cplusplus >= 201103L) 143 : #include <bits/exception_ptr.h> 144 : #include <bits/nested_exception.h> 145 : #endif 146 : 147 : #endif