summaryrefslogtreecommitdiff
path: root/firmware/2lib/include/2common.h
diff options
context:
space:
mode:
authorMathew King <mathewk@chromium.org>2019-11-05 22:21:33 +0000
committerJulius Werner <jwerner@chromium.org>2019-11-05 22:45:39 +0000
commited8390ec50b2decdf18a3416d07d37222cb0130d (patch)
treeae4392e8113ae1c0950c186979754082737a44de /firmware/2lib/include/2common.h
parent6a703f5b0edfdbf2eee72d59499f73585262a46f (diff)
downloadvboot-ed8390ec50b2decdf18a3416d07d37222cb0130d.tar.gz
Revert "Clean up implicit fall through."
This reverts commit 6a703f5b0edfdbf2eee72d59499f73585262a46f. Reason for revert: This change breaks building coreboot Original change's description: > Clean up implicit fall through. > > Directly use the __attribute__ ((fallthrough)) instead of > a macro. > This was suggested in CL:1772474. > > BUG=chromium:997709 > TEST=CQ > BRANCH=None > > Change-Id: Ic6cd417d7c735395a4b136dbb0879a6f1716da98 > Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/1897360 > Tested-by: Manoj Gupta <manojgupta@chromium.org> > Reviewed-by: Julius Werner <jwerner@chromium.org> > Commit-Queue: Manoj Gupta <manojgupta@chromium.org> Bug: chromium:997709 Change-Id: Icd0de8bcdee44d1b41f313a4f5aaba8108f734ab Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/1899735 Reviewed-by: Mathew King <mathewk@chromium.org> Reviewed-by: Julius Werner <jwerner@chromium.org> Commit-Queue: Julius Werner <jwerner@chromium.org> Tested-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'firmware/2lib/include/2common.h')
-rw-r--r--firmware/2lib/include/2common.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/firmware/2lib/include/2common.h b/firmware/2lib/include/2common.h
index b4e941c5..6c5563a6 100644
--- a/firmware/2lib/include/2common.h
+++ b/firmware/2lib/include/2common.h
@@ -71,6 +71,27 @@ struct vb2_public_key;
#endif
#endif
+// Have a generic fall-through for different versions of C/C++.
+// Taken from boringssl.
+#if defined(__cplusplus) && __cplusplus >= 201703L
+#define VBOOT_FALLTHROUGH [[fallthrough]]
+#elif defined(__cplusplus) && __cplusplus >= 201103L && defined(__clang__)
+#define VBOOT_FALLTHROUGH [[clang::fallthrough]]
+#elif defined(__cplusplus) && __cplusplus >= 201103L && defined(__GNUC__) && \
+ __GNUC__ >= 7
+#define VBOOT_FALLTHROUGH [[gnu::fallthrough]]
+#elif defined(__GNUC__) && __GNUC__ >= 7 // gcc 7
+#define VBOOT_FALLTHROUGH __attribute__ ((fallthrough))
+#elif defined(__clang__)
+#if __has_attribute(fallthrough)
+#define VBOOT_FALLTHROUGH __attribute__ ((fallthrough))
+#else // clang versions that do not support fallthrough.
+#define VBOOT_FALLTHROUGH
+#endif
+#else // C++11 on gcc 6, and all other cases
+#define VBOOT_FALLTHROUGH
+#endif
+
/**
* Round up a number to a multiple of VB2_WORKBUF_ALIGN
*