G M: Provides the _LIBCPP_WARNING macro, to be used for MSVC only, since that compiler doesn't support #warning.
llvm-svn: 191980
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 80b84d4c268b75994524b00db7a1437b070e98a8
diff --git a/src/exception.cpp b/src/exception.cpp
index d3e1b29..dc6d049 100644
--- a/src/exception.cpp
+++ b/src/exception.cpp
@@ -1,3 +1,5 @@
+
+
//===------------------------ exception.cpp -------------------------------===//
//
// The LLVM Compiler Infrastructure
@@ -39,6 +41,13 @@
static std::unexpected_handler __unexpected_handler;
#endif // __has_include(<cxxabi.h>)
+_LIBCPP_NORETURN
+static void _libcpp_abort(const char* msg)
+{
+ printf("%s\n", msg);
+ abort();
+}
+
namespace std
{
@@ -89,15 +98,13 @@
#endif // _LIBCPP_NO_EXCEPTIONS
(*get_terminate())();
// handler should not return
- printf("terminate_handler unexpectedly returned\n");
- ::abort ();
+ _libcpp_abort("terminate_handler unexpectedly returned\n");
#ifndef _LIBCPP_NO_EXCEPTIONS
}
catch (...)
{
// handler should not throw exception
- printf("terminate_handler unexpectedly threw an exception\n");
- ::abort ();
+ _libcpp_abort("terminate_handler unexpectedly threw an exception\n");
}
#endif // _LIBCPP_NO_EXCEPTIONS
}
@@ -111,12 +118,16 @@
// on Darwin, there is a helper function so __cxa_get_globals is private
return __cxa_uncaught_exception();
#else // __APPLE__
- #warning uncaught_exception not yet implemented
- printf("uncaught_exception not yet implemented\n");
- ::abort();
+# if defined(_MSC_VER) && ! defined(__clang__)
+ _LIBCPP_WARNING("uncaught_exception not yet implemented")
+# else
+# warning uncaught_exception not yet implemented
+# endif
+ _libcpp_abort("uncaught_exception not yet implemented\n");
#endif // __APPLE__
}
+
#ifndef _LIBCPPABI_VERSION
exception::~exception() _NOEXCEPT
@@ -149,9 +160,12 @@
#if HAVE_DEPENDENT_EH_ABI
__cxa_decrement_exception_refcount(__ptr_);
#else
- #warning exception_ptr not yet implemented
- printf("exception_ptr not yet implemented\n");
- ::abort();
+# if defined(_MSC_VER) && ! defined(__clang__)
+ _LIBCPP_WARNING("exception_ptr not yet implemented")
+# else
+# warning exception_ptr not yet implemented
+# endif
+ _libcpp_abort("exception_ptr not yet implemented\n");
#endif // __APPLE__
}
@@ -161,9 +175,14 @@
#if HAVE_DEPENDENT_EH_ABI
__cxa_increment_exception_refcount(__ptr_);
#else
- #warning exception_ptr not yet implemented
- printf("exception_ptr not yet implemented\n");
- ::abort();
+
+# if defined(_MSC_VER) && ! defined(__clang__)
+ _LIBCPP_WARNING("exception_ptr not yet implemented")
+# else
+# warning exception_ptr not yet implemented
+# endif
+ _libcpp_abort("exception_ptr not yet implemented\n");
+
#endif // __APPLE__
}
@@ -178,9 +197,14 @@
}
return *this;
#else // __APPLE__
- #warning exception_ptr not yet implemented
- printf("exception_ptr not yet implemented\n");
- ::abort();
+
+# if defined(_MSC_VER) && ! defined(__clang__)
+ _LIBCPP_WARNING("exception_ptr not yet implemented")
+# else
+# warning exception_ptr not yet implemented
+# endif
+ _libcpp_abort("exception_ptr not yet implemented\n");
+
#endif // __APPLE__
}
@@ -213,9 +237,12 @@
ptr.__ptr_ = __cxa_current_primary_exception();
return ptr;
#else // __APPLE__
- #warning exception_ptr not yet implemented
- printf("exception_ptr not yet implemented\n");
- ::abort();
+# if defined(_MSC_VER) && ! defined(__clang__)
+ _LIBCPP_WARNING( "exception_ptr not yet implemented" )
+# else
+# warning exception_ptr not yet implemented
+# endif
+ _libcpp_abort("exception_ptr not yet implemented\n");
#endif // __APPLE__
}
@@ -227,9 +254,12 @@
// if p.__ptr_ is NULL, above returns so we terminate
terminate();
#else // __APPLE__
- #warning exception_ptr not yet implemented
- printf("exception_ptr not yet implemented\n");
- ::abort();
+# if defined(_MSC_VER) && ! defined(__clang__)
+ _LIBCPP_WARNING("exception_ptr not yet implemented")
+# else
+# warning exception_ptr not yet implemented
+# endif
+ _libcpp_abort("exception_ptr not yet implemented\n");
#endif // __APPLE__
}
} // std