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