mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/compiler: import 'fallthrough' keyword from linux
-Wimplicit-fallthrough warns when a switch case falls through. Warning
can be suppress by either adding a /* fallthrough */ comment, or by
using a null statement: __attribute__ ((fallthrough))
Define the pseudo keyword 'fallthrough' for the ability to convert the
various case block /* fallthrough */ style comments to null statement
"__attribute__((__fallthrough__))"
In C mode, GCC supports the __fallthrough__ attribute since 7.1,
the same time the warning and the comment parsing were introduced.
fallthrough devolves to an empty "do {} while (0)" if the compiler
version (any version less than gcc 7) does not support the attribute.
Signed-off-by: Rahul Singh <rahul.singh@arm.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
This commit is contained in:
1 parent
51b444f84a
commit
be5dc0b90d
1 file changed
+16
@@ -33,6 +33,22 @@
|
||||
#define unreachable() __builtin_unreachable()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Add the pseudo keyword 'fallthrough' so case statement blocks
|
||||
* must end with any of these keywords:
|
||||
* break;
|
||||
* fallthrough;
|
||||
* goto <label>;
|
||||
* return [expression];
|
||||
*
|
||||
* gcc: https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html#Statement-Attributes
|
||||
*/
|
||||
#if (!defined(__clang__) && (__GNUC__ >= 7))
|
||||
# define fallthrough __attribute__((__fallthrough__))
|
||||
#else
|
||||
# define fallthrough do {} while (0) /* fallthrough */
|
||||
#endif
|
||||
|
||||
#ifdef __clang__
|
||||
/* Clang can replace some vars with new automatic ones that go in .data;
|
||||
* mark all explicit-segment vars 'used' to prevent that. */
|
||||
|
||||