1227825Stheraven//===------------------------- typeinfo.cpp -------------------------------===// 2227825Stheraven// 3227825Stheraven// The LLVM Compiler Infrastructure 4227825Stheraven// 5227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open 6227825Stheraven// Source Licenses. See LICENSE.TXT for details. 7227825Stheraven// 8227825Stheraven//===----------------------------------------------------------------------===// 9227825Stheraven#include <stdlib.h> 10241903Sdim 11241903Sdim#ifndef __has_include 12241903Sdim#define __has_include(inc) 0 13241903Sdim#endif 14241903Sdim 15249998Sdim#ifdef __APPLE__ 16227825Stheraven#include <cxxabi.h> 17241903Sdim#elif defined(LIBCXXRT) || __has_include(<cxxabi.h>) 18241903Sdim#include <cxxabi.h> 19227825Stheraven#endif 20227825Stheraven 21227825Stheraven#include "typeinfo" 22227825Stheraven 23232950Stheraven#if !(defined(_LIBCPPABI_VERSION) || defined(LIBCXXRT)) 24232950Stheraven 25227825Stheravenstd::bad_cast::bad_cast() _NOEXCEPT 26227825Stheraven{ 27227825Stheraven} 28227825Stheraven 29227825Stheravenstd::bad_cast::~bad_cast() _NOEXCEPT 30227825Stheraven{ 31227825Stheraven} 32227825Stheraven 33227825Stheravenconst char* 34227825Stheravenstd::bad_cast::what() const _NOEXCEPT 35227825Stheraven{ 36227825Stheraven return "std::bad_cast"; 37227825Stheraven} 38227825Stheraven 39227825Stheravenstd::bad_typeid::bad_typeid() _NOEXCEPT 40227825Stheraven{ 41227825Stheraven} 42227825Stheraven 43227825Stheravenstd::bad_typeid::~bad_typeid() _NOEXCEPT 44227825Stheraven{ 45227825Stheraven} 46227825Stheraven 47227825Stheravenconst char* 48227825Stheravenstd::bad_typeid::what() const _NOEXCEPT 49227825Stheraven{ 50227825Stheraven return "std::bad_typeid"; 51227825Stheraven} 52227825Stheraven 53249998Sdim#ifdef __APPLE__ 54227825Stheraven // On Darwin, the cxa_bad_* functions cannot be in the lower level library 55227825Stheraven // because bad_cast and bad_typeid are defined in his higher level library 56249998Sdim void __cxxabiv1::__cxa_bad_typeid() 57249998Sdim { 58249998Sdim#ifndef _LIBCPP_NO_EXCEPTIONS 59249998Sdim throw std::bad_typeid(); 60227825Stheraven#endif 61249998Sdim } 62249998Sdim void __cxxabiv1::__cxa_bad_cast() 63249998Sdim { 64249998Sdim#ifndef _LIBCPP_NO_EXCEPTIONS 65249998Sdim throw std::bad_cast(); 66249998Sdim#endif 67249998Sdim } 68249998Sdim#endif 69227825Stheraven 70232950Stheraven#endif // _LIBCPPABI_VERSION 71