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