1 //===------------------------- typeinfo.cpp -------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 #include <stdlib.h>
10 #if __APPLE__
11 #include <cxxabi.h>
12 #endif
13 
14 #include "typeinfo"
15 
16 std::bad_cast::bad_cast() _NOEXCEPT
17 {
18 }
19 
20 std::bad_cast::~bad_cast() _NOEXCEPT
21 {
22 }
23 
24 const char*
25 std::bad_cast::what() const _NOEXCEPT
26 {
27   return "std::bad_cast";
28 }
29 
30 std::bad_typeid::bad_typeid() _NOEXCEPT
31 {
32 }
33 
34 std::bad_typeid::~bad_typeid() _NOEXCEPT
35 {
36 }
37 
38 const char*
39 std::bad_typeid::what() const _NOEXCEPT
40 {
41   return "std::bad_typeid";
42 }
43 
44 #if __APPLE__
45   // On Darwin, the cxa_bad_* functions cannot be in the lower level library
46   // because bad_cast and bad_typeid are defined in his higher level library
47   void __cxxabiv1::__cxa_bad_typeid() { throw std::bad_typeid(); }
48   void __cxxabiv1::__cxa_bad_cast() { throw std::bad_cast(); }
49 #endif
50 
51