summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2011-03-14 20:01:21 +0000
committerJohn McCall <rjmccall@apple.com>2011-03-14 20:01:21 +0000
commit2f9a9ed785416a7350f30141fcc405b69a1b9d5d (patch)
tree04c3811dcf74f84b4eefbe4593cc3d3cd840d2ca /include
parent766faf4b2b7fe2835181777fb50d9f4d1814aba5 (diff)
downloadllvm-2f9a9ed785416a7350f30141fcc405b69a1b9d5d.tar.gz
llvm-2f9a9ed785416a7350f30141fcc405b69a1b9d5d.tar.bz2
llvm-2f9a9ed785416a7350f30141fcc405b69a1b9d5d.tar.xz
Make llvm_unreachable evaluate to __builtin_unreachable() in -Asserts
builds, which was the apparent consensus of PR8973 and llvmdev. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127608 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/Support/Compiler.h15
-rw-r--r--include/llvm/Support/ErrorHandling.h2
2 files changed, 16 insertions, 1 deletions
diff --git a/include/llvm/Support/Compiler.h b/include/llvm/Support/Compiler.h
index 67f0fd7e0d..2d2a0b124a 100644
--- a/include/llvm/Support/Compiler.h
+++ b/include/llvm/Support/Compiler.h
@@ -126,4 +126,19 @@
decl
#endif
+// LLVM_BUILTIN_UNREACHABLE - On compilers which support it, expands
+// to an expression which states that it is undefined behavior for the
+// compiler to reach this point.
+#if defined(__clang__) || (__GNUC__ > 4) \
+ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+# define LLVM_BUILTIN_UNREACHABLE __builtin_unreachable()
+#else
+#ifdef __cplusplus
+extern "C" LLVM_ATTRIBUTE_NORETURN void abort();
+#else
+extern LLVM_ATTRIBUTE_NORETURN void abort();
+#endif
+# define LLVM_BUILTIN_UNREACHABLE abort()
+#endif
+
#endif
diff --git a/include/llvm/Support/ErrorHandling.h b/include/llvm/Support/ErrorHandling.h
index 5eca438d8b..fb0c88d8d8 100644
--- a/include/llvm/Support/ErrorHandling.h
+++ b/include/llvm/Support/ErrorHandling.h
@@ -97,7 +97,7 @@ namespace llvm {
#define llvm_unreachable(msg) \
::llvm::llvm_unreachable_internal(msg, __FILE__, __LINE__)
#else
-#define llvm_unreachable(msg) ::llvm::llvm_unreachable_internal()
+#define llvm_unreachable(msg) LLVM_BUILTIN_UNREACHABLE
#endif
#endif