typeinfo.cpp revision dea7f39af1ae5a71adfc0434b111962345193ef2
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>
101348fba3e2fc90f727ef88c17d9073a2b5e9686eHoward Hinnant#if __APPLE__
11c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik#include <cxxabi.h>
121348fba3e2fc90f727ef88c17d9073a2b5e9686eHoward Hinnant#endif
13804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik
14804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik#include "typeinfo"
15804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik
16dea7f39af1ae5a71adfc0434b111962345193ef2Howard Hinnant#ifndef _LIBCPPABI_VERSION
17dea7f39af1ae5a71adfc0434b111962345193ef2Howard Hinnant
18ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::bad_cast() _NOEXCEPT
1916e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant{
20804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik}
21804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik
22ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::~bad_cast() _NOEXCEPT
2316e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant{
24804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik}
25804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik
2616e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnantconst char*
27ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_cast::what() const _NOEXCEPT
28804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{
29804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik  return "std::bad_cast";
30804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik}
31804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik
32ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_typeid::bad_typeid() _NOEXCEPT
3316e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant{
34804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik}
35804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik
36ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_typeid::~bad_typeid() _NOEXCEPT
37804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{
38804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik}
39804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik
4016e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnantconst char*
41ed56921d6e491eb96f489cedf24fed393fdfc0bfHoward Hinnantstd::bad_typeid::what() const _NOEXCEPT
42804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik{
43804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik  return "std::bad_typeid";
44804b6e73d41fc61cae5be513276183c69a4530b5Nick Kledzik}
45c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik
46c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik#if __APPLE__
47c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik  // On Darwin, the cxa_bad_* functions cannot be in the lower level library
48c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik  // because bad_cast and bad_typeid are defined in his higher level library
49c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik  void __cxxabiv1::__cxa_bad_typeid() { throw std::bad_typeid(); }
50c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik  void __cxxabiv1::__cxa_bad_cast() { throw std::bad_cast(); }
51c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik#endif
52c7e4d82bc01d13ec7dbf7823fd38aea9873d0a21Nick Kledzik
53dea7f39af1ae5a71adfc0434b111962345193ef2Howard Hinnant#endif  // _LIBCPPABI_VERSION
54