diff options
author | Nico Weber <nicolasweber@gmx.de> | 2018-10-24 15:34:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-24 15:34:43 (GMT) |
commit | fccab7408a53b936fe1a6a527746a5119be71c66 (patch) | |
tree | c58f35a8d50e7516211f4dc82d40e37720cfa5b8 /src | |
parent | d2045dedc39885e702176b2b5e05bc77024ae3aa (diff) | |
parent | 08ef815c7b55f28417b1a965eeab3640558d5f5a (diff) | |
download | Ninja-fccab7408a53b936fe1a6a527746a5119be71c66.zip Ninja-fccab7408a53b936fe1a6a527746a5119be71c66.tar.gz Ninja-fccab7408a53b936fe1a6a527746a5119be71c66.tar.bz2 |
Merge pull request #1417 from stefanb2/topic-silence-gcc-fallthrough-warnings
Silence GCC -Wimplicit-fallthrough warnings
Diffstat (limited to 'src')
-rw-r--r-- | src/build_log.cc | 6 | ||||
-rw-r--r-- | src/hash_map.h | 3 | ||||
-rw-r--r-- | src/util.cc | 2 | ||||
-rw-r--r-- | src/util.h | 14 |
4 files changed, 24 insertions, 1 deletions
diff --git a/src/build_log.cc b/src/build_log.cc index c75be95..2a65f9d 100644 --- a/src/build_log.cc +++ b/src/build_log.cc @@ -76,11 +76,17 @@ uint64_t MurmurHash64A(const void* key, size_t len) { switch (len & 7) { case 7: h ^= uint64_t(data[6]) << 48; + NINJA_FALLTHROUGH; case 6: h ^= uint64_t(data[5]) << 40; + NINJA_FALLTHROUGH; case 5: h ^= uint64_t(data[4]) << 32; + NINJA_FALLTHROUGH; case 4: h ^= uint64_t(data[3]) << 24; + NINJA_FALLTHROUGH; case 3: h ^= uint64_t(data[2]) << 16; + NINJA_FALLTHROUGH; case 2: h ^= uint64_t(data[1]) << 8; + NINJA_FALLTHROUGH; case 1: h ^= uint64_t(data[0]); h *= m; }; diff --git a/src/hash_map.h b/src/hash_map.h index a91aeb9..55d2c9d 100644 --- a/src/hash_map.h +++ b/src/hash_map.h @@ -18,6 +18,7 @@ #include <algorithm> #include <string.h> #include "string_piece.h" +#include "util.h" // MurmurHash2, by Austin Appleby static inline @@ -40,7 +41,9 @@ unsigned int MurmurHash2(const void* key, size_t len) { } switch (len) { case 3: h ^= data[2] << 16; + NINJA_FALLTHROUGH; case 2: h ^= data[1] << 8; + NINJA_FALLTHROUGH; case 1: h ^= data[0]; h *= m; }; diff --git a/src/util.cc b/src/util.cc index 61a038b..760bc23 100644 --- a/src/util.cc +++ b/src/util.cc @@ -197,7 +197,7 @@ bool CanonicalizePath(char* path, size_t* len, uint64_t* slash_bits, case '\\': bits |= bits_mask; *c = '/'; - // Intentional fallthrough. + NINJA_FALLTHROUGH; case '/': bits_mask <<= 1; } @@ -34,6 +34,20 @@ using namespace std; /// Log a fatal message and exit. NORETURN void Fatal(const char* msg, ...); +// Have a generic fall-through for different versions of C/C++. +#if defined(__cplusplus) && __cplusplus >= 201703L +#define NINJA_FALLTHROUGH [[fallthrough]] +#elif defined(__cplusplus) && __cplusplus >= 201103L && defined(__clang__) +#define NINJA_FALLTHROUGH [[clang::fallthrough]] +#elif defined(__cplusplus) && __cplusplus >= 201103L && defined(__GNUC__) && \ + __GNUC__ >= 7 +#define NINJA_FALLTHROUGH [[gnu::fallthrough]] +#elif defined(__GNUC__) && __GNUC__ >= 7 // gcc 7 +#define NINJA_FALLTHROUGH __attribute__ ((fallthrough)) +#else // C++11 on gcc 6, and all other cases +#define NINJA_FALLTHROUGH +#endif + /// Log a warning message. void Warning(const char* msg, ...); |