Index: include/llvm/Support/Compiler.h =================================================================== --- include/llvm/Support/Compiler.h (revision 127522) +++ include/llvm/Support/Compiler.h (working copy) @@ -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 Index: include/llvm/Support/ErrorHandling.h =================================================================== --- include/llvm/Support/ErrorHandling.h (revision 127522) +++ include/llvm/Support/ErrorHandling.h (working copy) @@ -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