diff options
author | Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> | 2021-11-09 11:57:28 +0100 |
---|---|---|
committer | Eric Engestrom <eric@engestrom.ch> | 2021-11-10 21:58:06 +0000 |
commit | e5b1bee3397c15cd144129fdd3cfc65a48df3c6b (patch) | |
tree | a4836658d88aaf5ef2fe10fc56cc416020d1213d | |
parent | 766c57480bfb4a11018b3d5a346d2e785f265b1f (diff) | |
download | mesa-e5b1bee3397c15cd144129fdd3cfc65a48df3c6b.tar.gz |
util: Add support for clang::fallthrough.
Looks like the __attribute__ version doesn't work for C++ in the
Android build. Only found now because we don't enable
-Wimplicit-fallthrough by default project wide for C++. Only
ACO enables it.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13164>
(cherry picked from commit aad80e47d8aab52081a6f10a5b0cd01390e26f10)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/util/compiler.h | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/.pick_status.json b/.pick_status.json index ceab3bbdb9c..d481718c59f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -202,7 +202,7 @@ "description": "util: Add support for clang::fallthrough.", "nominated": false, "nomination_type": null, - "resolution": 4, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/util/compiler.h b/src/util/compiler.h index da602cfa33d..83f8e346a08 100644 --- a/src/util/compiler.h +++ b/src/util/compiler.h @@ -76,9 +76,20 @@ # define __has_attribute(x) 0 #endif +#if defined(__has_cpp_attribute) && defined(__clang__) +/* We do not do the same trick as __has_attribute because parsing + * clang::fallthrough in the preprocessor fails in GCC. */ +# define HAS_CLANG_FALLTHROUGH __has_cpp_attribute(clang::fallthrough) +#else +# define HAS_CLANG_FALLTHROUGH 0 +#endif + #if __cplusplus >= 201703L || __STDC_VERSION__ > 201710L /* Standard C++17/C23 attribute */ #define FALLTHROUGH [[fallthrough]] +#elif HAS_CLANG_FALLTHROUGH +/* Clang++ specific */ +#define FALLTHROUGH [[clang::fallthrough]] #elif __has_attribute(fallthrough) /* Non-standard but supported by at least gcc and clang */ #define FALLTHROUGH __attribute__((fallthrough)) |