uwrap: Suppress fall through warnings
authorAndreas Schneider <asn@samba.org>
Thu, 3 Aug 2017 08:48:45 +0000 (10:48 +0200)
committerAndreas Schneider <asn@samba.org>
Mon, 13 Aug 2018 10:05:09 +0000 (12:05 +0200)
Suppress fall through warning in switch statement where the fall trough
is intentional.

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
ConfigureChecks.cmake
config.h.cmake
src/uid_wrapper.c

index 150d89b4dbe0ba0223ca8d0e90ca8f4f29679f14..910a255a536aac4d13bf7e9687a54a1a87716c01 100644 (file)
@@ -188,6 +188,33 @@ int main(void) {
     return 0;
 }" HAVE_FUNCTION_ATTRIBUTE_FORMAT)
 
+check_c_source_compiles("
+#define FALL_THROUGH __attribute__((fallthrough))
+
+enum direction_e {
+    UP = 0,
+    DOWN,
+};
+
+int main(void) {
+    enum direction_e key = UP;
+    int i = 10;
+    int j = 0;
+
+    switch (key) {
+    case UP:
+        i = 5;
+        FALL_THROUGH;
+    case DOWN:
+        j = i * 2;
+        break;
+    default:
+        break;
+    }
+
+    return 0;
+}" HAVE_FALLTHROUGH_ATTRIBUTE)
+
 # SYSTEM LIBRARIES
 
 check_library_exists(dl dlopen "" HAVE_LIBDL)
index b862048c6acf07dd5dc35f996aaf0e63459e5e7a..c32af7b5e1bdcd14c345be4447332f44dd4aabf4 100644 (file)
@@ -68,6 +68,7 @@
 #cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1
 #cmakedefine HAVE_ADDRESS_SANITIZER_ATTRIBUTE 1
 #cmakedefine HAVE_FUNCTION_ATTRIBUTE_FORMAT 1
+#cmakedefine HAVE_FALLTHROUGH_ATTRIBUTE 1
 
 /*************************** ENDIAN *****************************/
 
index 9c4b0ee78d3e7cb48ea49e3f3a8587bfe85d92e5..c362d41212afb391935023651458b9f314d8db79 100644 (file)
 #define PRINTF_ATTRIBUTE(a,b)
 #endif /* HAVE_FUNCTION_ATTRIBUTE_FORMAT */
 
+#ifndef FALL_THROUGH
+# ifdef HAVE_FALLTHROUGH_ATTRIBUTE
+#  define FALL_THROUGH __attribute__ ((fallthrough))
+# else /* HAVE_FALLTHROUGH_ATTRIBUTE */
+#  define FALL_THROUGH
+# endif /* HAVE_FALLTHROUGH_ATTRIBUTE */
+#endif /* FALL_THROUGH */
+
 #define UWRAP_DLIST_ADD(list,item) do { \
        if (!(list)) { \
                (item)->prev    = NULL; \
@@ -392,9 +400,9 @@ static void *uwrap_load_lib_handle(enum uwrap_lib lib)
 
        switch (lib) {
        case UWRAP_LIBNSL:
-               /* FALL TROUGH */
+               FALL_THROUGH;
        case UWRAP_LIBSOCKET:
-               /* FALL TROUGH */
+               FALL_THROUGH;
        case UWRAP_LIBC:
                handle = uwrap.libc.handle;
                if (handle == NULL) {