summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>2021-11-09 11:57:28 +0100
committerEric Engestrom <eric@engestrom.ch>2021-11-10 21:58:06 +0000
commite5b1bee3397c15cd144129fdd3cfc65a48df3c6b (patch)
treea4836658d88aaf5ef2fe10fc56cc416020d1213d
parent766c57480bfb4a11018b3d5a346d2e785f265b1f (diff)
downloadmesa-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.json2
-rw-r--r--src/util/compiler.h11
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))