From 2f9a9ed785416a7350f30141fcc405b69a1b9d5d Mon Sep 17 00:00:00 2001 From: John McCall Date: Mon, 14 Mar 2011 20:01:21 +0000 Subject: [PATCH] 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 --- include/llvm/Support/Compiler.h | 15 +++++++++++++++ include/llvm/Support/ErrorHandling.h | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/llvm/Support/Compiler.h b/include/llvm/Support/Compiler.h index 67f0fd7e0dc..2d2a0b124ab 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 5eca438d8b4..fb0c88d8d8d 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