From a36f4a25b313ddddeceb77ebc2328e22ac4fdc5b Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Tue, 16 Aug 2016 23:24:13 +0000 Subject: [PATCH] Introduce LLVM_FALLTHROUGH, which expands to the C++17 attribute. This allows you to annotate switch case fallthrough in a better way than a "// FALLTHROUGH" comment. Eventually it would be nice to turn on -Wimplicit-fallthrough, if we can get the code base clean. llvm-svn: 278868 --- llvm/include/llvm/Support/Compiler.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h index 516691f29de0..6b00ff91cb09 100644 --- a/llvm/include/llvm/Support/Compiler.h +++ b/llvm/include/llvm/Support/Compiler.h @@ -33,6 +33,10 @@ # define __has_attribute(x) 0 #endif +#ifndef __has_cpp_attribute +# define __has_cpp_attribute(x) 0 +#endif + #ifndef __has_builtin # define __has_builtin(x) 0 #endif @@ -228,6 +232,15 @@ #define LLVM_ATTRIBUTE_RETURNS_NOALIAS #endif +/// LLVM_FALLTHROUGH - Mark fallthrough cases in switch statements. +#if __has_cpp_attribute(fallthrough) +#define LLVM_FALLTHROUGH [[fallthrough]] +#elif __has_cpp_attribute(clang::fallthrough) +#define LLVM_FALLTHROUGH [[clang::fallthrough]] +#else +#define LLVM_FALLTHROUGH +#endif + /// LLVM_EXTENSION - Support compilers where we have a keyword to suppress /// pedantic diagnostics. #ifdef __GNUC__