mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-24 20:29:39 +08:00
This was put in to get libc++ building without libcxxabi. We now have macros that show that we are building against libcxxabi so use that instead. This guards against existing but broken cxxabi.h headers on the system. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@250507 91177308-0d34-0410-b5e6-96231b3b80d8
69 lines
1.4 KiB
C++
69 lines
1.4 KiB
C++
//===------------------------- typeinfo.cpp -------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
|
// Source Licenses. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#include <stdlib.h>
|
|
|
|
#if defined(__APPLE__) || defined(LIBCXXRT) || \
|
|
defined(LIBCXX_BUILDING_LIBCXXABI)
|
|
#include <cxxabi.h>
|
|
#endif
|
|
|
|
#include "typeinfo"
|
|
|
|
#if !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION)
|
|
|
|
std::bad_cast::bad_cast() _NOEXCEPT
|
|
{
|
|
}
|
|
|
|
std::bad_typeid::bad_typeid() _NOEXCEPT
|
|
{
|
|
}
|
|
|
|
#ifndef __GLIBCXX__
|
|
|
|
std::bad_cast::~bad_cast() _NOEXCEPT
|
|
{
|
|
}
|
|
|
|
const char*
|
|
std::bad_cast::what() const _NOEXCEPT
|
|
{
|
|
return "std::bad_cast";
|
|
}
|
|
|
|
std::bad_typeid::~bad_typeid() _NOEXCEPT
|
|
{
|
|
}
|
|
|
|
const char*
|
|
std::bad_typeid::what() const _NOEXCEPT
|
|
{
|
|
return "std::bad_typeid";
|
|
}
|
|
|
|
#ifdef __APPLE__
|
|
// On Darwin, the cxa_bad_* functions cannot be in the lower level library
|
|
// because bad_cast and bad_typeid are defined in his higher level library
|
|
void __cxxabiv1::__cxa_bad_typeid()
|
|
{
|
|
#ifndef _LIBCPP_NO_EXCEPTIONS
|
|
throw std::bad_typeid();
|
|
#endif
|
|
}
|
|
void __cxxabiv1::__cxa_bad_cast()
|
|
{
|
|
#ifndef _LIBCPP_NO_EXCEPTIONS
|
|
throw std::bad_cast();
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
#endif // !__GLIBCXX__
|
|
#endif // !LIBCXXRT && !_LIBCPPABI_VERSION
|