1804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik//===------------------------- typeinfo.cpp -------------------------------===// 2804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik// 3804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik// The LLVM Compiler Infrastructure 4804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik// 8804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik//===----------------------------------------------------------------------===// 9804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik#include <stdlib.h> 108b5bb3c5af878dbcbb548bac3579e46ad10189beHoward Hinnant 118b5bb3c5af878dbcbb548bac3579e46ad10189beHoward Hinnant#ifndef __has_include 128b5bb3c5af878dbcbb548bac3579e46ad10189beHoward Hinnant#define __has_include(inc) 0 138b5bb3c5af878dbcbb548bac3579e46ad10189beHoward Hinnant#endif 148b5bb3c5af878dbcbb548bac3579e46ad10189beHoward Hinnant 15dece7fe6706591d80e4694a986446f756611733cMarshall Clow#ifdef __APPLE__ 16c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik#include <cxxabi.h> 178b5bb3c5af878dbcbb548bac3579e46ad10189beHoward Hinnant#elif defined(LIBCXXRT) || __has_include(<cxxabi.h>) 188b5bb3c5af878dbcbb548bac3579e46ad10189beHoward Hinnant#include <cxxabi.h> 191348fba3e2fc90f727ef88c17d9073a2b5e9686eHoward Hinnant#endif 20804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 21804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik#include "typeinfo" 22804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 238df0320334634bc748f02c64a86747539f5c2842Peter Collingbourne#if !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION) 24dea7f39af1ae5a71adfc0434b111962345193ef2Howard Hinnant 25ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::bad_cast() _NOEXCEPT 2616e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant{ 27804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 28804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 298df0320334634bc748f02c64a86747539f5c2842Peter Collingbournestd::bad_typeid::bad_typeid() _NOEXCEPT 308df0320334634bc748f02c64a86747539f5c2842Peter Collingbourne{ 318df0320334634bc748f02c64a86747539f5c2842Peter Collingbourne} 328df0320334634bc748f02c64a86747539f5c2842Peter Collingbourne 338df0320334634bc748f02c64a86747539f5c2842Peter Collingbourne#ifndef __GLIBCXX__ 348df0320334634bc748f02c64a86747539f5c2842Peter Collingbourne 35ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::~bad_cast() _NOEXCEPT 3616e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant{ 37804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 38804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 3916e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnantconst char* 40ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::what() const _NOEXCEPT 41804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{ 42804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik return "std::bad_cast"; 43804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 44804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 45ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_typeid::~bad_typeid() _NOEXCEPT 46804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{ 47804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 48804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik 4916e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnantconst char* 50ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_typeid::what() const _NOEXCEPT 51804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{ 52804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik return "std::bad_typeid"; 53804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik} 54c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik 55dece7fe6706591d80e4694a986446f756611733cMarshall Clow#ifdef __APPLE__ 56c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik // On Darwin, the cxa_bad_* functions cannot be in the lower level library 57c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik // because bad_cast and bad_typeid are defined in his higher level library 58db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant void __cxxabiv1::__cxa_bad_typeid() 59db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant { 60db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 61db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant throw std::bad_typeid(); 62db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant#endif 63db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant } 64db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant void __cxxabiv1::__cxa_bad_cast() 65db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant { 66db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 67db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant throw std::bad_cast(); 68db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant#endif 69db4d478ff421cd1b1be254264367ceceebf39481Howard Hinnant } 70c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik#endif 71c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik 728df0320334634bc748f02c64a86747539f5c2842Peter Collingbourne#endif // !__GLIBCXX__ 738df0320334634bc748f02c64a86747539f5c2842Peter Collingbourne#endif // !LIBCXXRT && !_LIBCPPABI_VERSION 74