From d7fea1ba0c387be568236fc4bd5e945eaa0145ae Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Sat, 7 Feb 2015 06:51:47 -0800 Subject: [PATCH] Try detecting clang::fallthrough using __has_cpp_attribute and use it to silence one of the warnings in #96. --- format.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/format.h b/format.h index a25d807cfee6..c5d76ee10a70 100644 --- a/format.h +++ b/format.h @@ -76,6 +76,12 @@ # define FMT_HAS_BUILTIN(x) 0 #endif +#ifdef __has_cpp_attribute +# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +# define FMT_HAS_CPP_ATTRIBUTE(x) 0 +#endif + #ifndef FMT_USE_VARIADIC_TEMPLATES // Variadic templates are available in GCC since version 4.4 // (http://gcc.gnu.org/projects/cxx0x.html) and in Visual C++ @@ -109,6 +115,12 @@ # define FMT_NOEXCEPT(expr) #endif +#if FMT_HAS_CPP_ATTRIBUTE(clang::fallthrough) +# define FMT_FALLTHROUGH [[clang::fallthrough]] +#else +# define FMT_FALLTHROUGH +#endif + // A macro to disallow the copy constructor and operator= functions // This should be used in the private: declarations for a class #define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \ @@ -864,7 +876,7 @@ class ArgVisitor { switch (arg.type) { default: assert(false); - // Fall through. + FMT_FALLTHROUGH; case Arg::INT: return FMT_DISPATCH(visit_int(arg.int_value)); case Arg::UINT: