diff options
-rw-r--r-- | ConfigureChecks.cmake | 27 | ||||
-rw-r--r-- | config.h.cmake | 1 | ||||
-rw-r--r-- | src/socket_wrapper.c | 16 |
3 files changed, 39 insertions, 5 deletions
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index 0691c8a..cb2ea92 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -198,6 +198,33 @@ int main(void) { }" HAVE_DESTRUCTOR_ATTRIBUTE) 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) + +check_c_source_compiles(" __thread int tls; int main(void) { diff --git a/config.h.cmake b/config.h.cmake index 2f494a4..b98ceff 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -62,6 +62,7 @@ #cmakedefine HAVE_GCC_THREAD_LOCAL_STORAGE 1 #cmakedefine HAVE_CONSTRUCTOR_ATTRIBUTE 1 #cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1 +#cmakedefine HAVE_FALLTHROUGH_ATTRIBUTE 1 #cmakedefine HAVE_ADDRESS_SANITIZER_ATTRIBUTE 1 #cmakedefine HAVE_SOCKADDR_STORAGE 1 #cmakedefine HAVE_IPV6 1 diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index 395d0d7..29cd3f9 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -107,6 +107,12 @@ enum swrap_dbglvl_e { #define DESTRUCTOR_ATTRIBUTE #endif +#ifdef HAVE_FALLTHROUGH_ATTRIBUTE +#define FALL_THROUGH __attribute__ ((fallthrough)) +#else +#define FALL_THROUGH +#endif + #ifdef HAVE_ADDRESS_SANITIZER_ATTRIBUTE #define DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE __attribute__((no_sanitize_address)) #else @@ -587,7 +593,7 @@ static void *swrap_load_lib_handle(enum swrap_lib lib) switch (lib) { case SWRAP_LIBNSL: - /* FALL TROUGH */ + FALL_THROUGH; case SWRAP_LIBSOCKET: #ifdef HAVE_LIBSOCKET handle = swrap.libc.socket_handle; @@ -606,7 +612,7 @@ static void *swrap_load_lib_handle(enum swrap_lib lib) } break; #endif - /* FALL TROUGH */ + FALL_THROUGH; case SWRAP_LIBC: handle = swrap.libc.handle; #ifdef LIBC_SO @@ -1861,7 +1867,7 @@ static int sockaddr_convert_to_un(struct socket_info *si, * AF_UNSPEC is mapped to AF_INET and must be treated here. */ - /* FALL THROUGH */ + FALL_THROUGH; } case AF_INET: #ifdef HAVE_IPV6 @@ -2790,12 +2796,12 @@ static int swrap_socket(int family, int type, int protocol) if (real_type == SOCK_STREAM) { break; } - /*fall through*/ + FALL_THROUGH; case 17: if (real_type == SOCK_DGRAM) { break; } - /*fall through*/ + FALL_THROUGH; default: errno = EPROTONOSUPPORT; return -1; |