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 11#ifndef __has_include 12#define __has_include(inc) 0 13#endif 14 15#ifdef __APPLE__ 16#include <cxxabi.h> 17#elif defined(LIBCXXRT) || __has_include(<cxxabi.h>) 18#include <cxxabi.h> 19#endif 20 21#include "typeinfo" 22 23#if !(defined(_LIBCPPABI_VERSION) || defined(LIBCXXRT)) 24 25std::bad_cast::bad_cast() _NOEXCEPT 26{ 27} 28 29std::bad_cast::~bad_cast() _NOEXCEPT 30{ 31} 32 33const char* 34std::bad_cast::what() const _NOEXCEPT 35{ 36 return "std::bad_cast"; 37} 38 39std::bad_typeid::bad_typeid() _NOEXCEPT 40{ 41} 42 43std::bad_typeid::~bad_typeid() _NOEXCEPT 44{ 45} 46 47const char* 48std::bad_typeid::what() const _NOEXCEPT 49{ 50 return "std::bad_typeid"; 51} 52 53#ifdef __APPLE__ 54 // On Darwin, the cxa_bad_* functions cannot be in the lower level library 55 // because bad_cast and bad_typeid are defined in his higher level library 56 void __cxxabiv1::__cxa_bad_typeid() 57 { 58#ifndef _LIBCPP_NO_EXCEPTIONS 59 throw std::bad_typeid(); 60#endif 61 } 62 void __cxxabiv1::__cxa_bad_cast() 63 { 64#ifndef _LIBCPP_NO_EXCEPTIONS 65 throw std::bad_cast(); 66#endif 67 } 68#endif 69 70#endif // _LIBCPPABI_VERSION 71