diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h --- a/llvm/include/llvm/Support/Compiler.h +++ b/llvm/include/llvm/Support/Compiler.h @@ -16,7 +16,9 @@ #include "llvm/Config/llvm-config.h" +#if __cplusplus #include +#endif #include #if defined(_MSC_VER) @@ -255,7 +257,11 @@ #elif !__cplusplus // Workaround for llvm.org/PR23435, since clang 3.6 and below emit a spurious // error when __has_cpp_attribute is given a scoped attribute in C mode. -#define LLVM_FALLTHROUGH + #if __has_attribute(fallthrough) + #define LLVM_FALLTHROUGH __attribute__((fallthorugh)) + #else + #define LLVM_FALLTHROUGH + #endif #elif __has_cpp_attribute(clang::fallthrough) #define LLVM_FALLTHROUGH [[clang::fallthrough]] #else @@ -527,6 +533,7 @@ #define LLVM_ENABLE_EXCEPTIONS 1 #endif +#if __cplusplus namespace llvm { /// Allocate a buffer of memory with the given size and alignment. @@ -570,3 +577,4 @@ } // End namespace llvm #endif +#endif diff --git a/llvm/lib/Support/regcomp.c b/llvm/lib/Support/regcomp.c --- a/llvm/lib/Support/regcomp.c +++ b/llvm/lib/Support/regcomp.c @@ -48,6 +48,7 @@ #include "regex2.h" #include "llvm/Config/config.h" +#include "llvm/Support/Compiler.h" /* character-class table */ static struct cclass { @@ -537,7 +538,7 @@ break; case '{': /* okay as ordinary except if digit follows */ REQUIRE(!MORE() || !isdigit((uch)PEEK()), REG_BADRPT); - /* FALLTHROUGH */ + LLVM_FALLTHROUGH; default: ordinary(p, c); break; @@ -733,7 +734,7 @@ break; case '*': REQUIRE(starordinary, REG_BADRPT); - /* FALLTHROUGH */ + LLVM_FALLTHROUGH; default: ordinary(p, (char)c); break; @@ -1635,7 +1636,7 @@ return; } } while (OP(s) != O_QUEST && OP(s) != O_CH); - /* fallthrough */ + LLVM_FALLTHROUGH; default: /* things that break a sequence */ if (newlen > g->mlen) { /* ends one */ start = newstart;