[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] xen/compiler: import 'fallthrough' keyword from linux



commit be5dc0b90db68df57925ee951ccc480fcab14192
Author:     Rahul Singh <rahul.singh@xxxxxxx>
AuthorDate: Wed Jan 20 14:52:41 2021 +0000
Commit:     Julien Grall <jgrall@xxxxxxxxxx>
CommitDate: Sat Jan 23 11:48:33 2021 +0000

    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@xxxxxxx>
    Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>
---
 xen/include/xen/compiler.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/xen/include/xen/compiler.h b/xen/include/xen/compiler.h
index e643e69128..0ec0b4698e 100644
--- a/xen/include/xen/compiler.h
+++ b/xen/include/xen/compiler.h
@@ -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. */
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.