diff options
| -rw-r--r-- | libcxxabi/include/cxxabi.h | 10 | ||||
| -rw-r--r-- | libcxxabi/src/cxa_aux_runtime.cpp | 34 | ||||
| -rw-r--r-- | libcxxabi/src/cxa_virtual.cpp | 2 |
3 files changed, 42 insertions, 4 deletions
diff --git a/libcxxabi/include/cxxabi.h b/libcxxabi/include/cxxabi.h index 918cd5da168..ec69b55ce0f 100644 --- a/libcxxabi/include/cxxabi.h +++ b/libcxxabi/include/cxxabi.h @@ -18,6 +18,8 @@ #include <stddef.h> #include <stdint.h> +#define LIBCXXABI_NORETURN + namespace std { class type_info; // forward declaration } @@ -47,16 +49,16 @@ extern void __cxa_rethrow(); // 2.6 Auxiliary Runtime APIs -extern void __cxa_bad_cast(); -extern void __cxa_bad_typeid(); +extern LIBCXXABI_NORETURN void __cxa_bad_cast(void); +extern LIBCXXABI_NORETURN void __cxa_bad_typeid(void); // 3.2.6 Pure Virtual Function API -extern void __cxa_pure_virtual(void); +extern LIBCXXABI_NORETURN void __cxa_pure_virtual(void); // 3.2.7 Deleted Virtual Function API -extern void __cxa_deleted_virtual(void); +extern LIBCXXABI_NORETURN void __cxa_deleted_virtual(void); // 3.3.2 One-time Construction API extern int __cxa_guard_acquire(uint64_t*); diff --git a/libcxxabi/src/cxa_aux_runtime.cpp b/libcxxabi/src/cxa_aux_runtime.cpp new file mode 100644 index 00000000000..cf6851b4f02 --- /dev/null +++ b/libcxxabi/src/cxa_aux_runtime.cpp @@ -0,0 +1,34 @@ +//===------------------------ cxa_aux_runtime.cpp -------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +// +// This file implements the "Auxiliary Runtime APIs" +// http://www.codesourcery.com/public/cxx-abi/abi-eh.html#cxx-aux +//===----------------------------------------------------------------------===// + +#include "cxxabi.h" +#include <typeinfo> + +namespace __cxxabiv1 +{ + +extern "C" +{ + +LIBCXXABI_NORETURN +void __cxa_bad_cast (void) { + throw std::bad_cast(); +} + +LIBCXXABI_NORETURN +void __cxa_bad_typeid(void) { + throw std::bad_typeid(); +} + +} // extern "C" + +} // abi diff --git a/libcxxabi/src/cxa_virtual.cpp b/libcxxabi/src/cxa_virtual.cpp index bdcf6878734..e3450d12b1e 100644 --- a/libcxxabi/src/cxa_virtual.cpp +++ b/libcxxabi/src/cxa_virtual.cpp @@ -18,11 +18,13 @@ namespace __cxxabiv1 extern "C" { +LIBCXXABI_NORETURN void __cxa_pure_virtual(void) { fputs("Pure virtual function called!\n", stderr); abort(); } +LIBCXXABI_NORETURN void __cxa_deleted_virtual(void) { fputs("Deleted virtual function called!\n", stderr); abort(); |

