From 0b6f0e12323b6e839be460f51ceba40f36ad3e67 Mon Sep 17 00:00:00 2001 From: Karel Miko Date: Sun, 3 May 2026 19:45:12 +0200 Subject: [PATCH] fix clang warnings -Wimplicit-fallthrough (while keeping /* FALLTHROUGH */ for some code review tools) --- src/ciphers/multi2.c | 6 +++--- src/ciphers/twofish/twofish.c | 6 +++--- src/headers/tomcrypt_cfg.h | 3 +++ src/misc/adler32.c | 8 ++++---- src/misc/padding/padding_depad.c | 2 +- src/misc/padding/padding_pad.c | 2 +- src/misc/pkcs12/pkcs12_utf8_to_utf16.c | 10 +++++----- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/ciphers/multi2.c b/src/ciphers/multi2.c index dbd9c60d..624161e1 100644 --- a/src/ciphers/multi2.c +++ b/src/ciphers/multi2.c @@ -88,9 +88,9 @@ static void s_decrypt(ulong32 *p, int N, const ulong32 *uk) int n, t; for (t = 4*(((N-1)>>2)&1), n = N; ; ) { switch (n<=4 ? n : ((n-1)%4)+1) { - case 4: s_pi4(p, uk+t); --n; /* FALLTHROUGH */ - case 3: s_pi3(p, uk+t); --n; /* FALLTHROUGH */ - case 2: s_pi2(p, uk+t); --n; /* FALLTHROUGH */ + case 4: s_pi4(p, uk+t); --n; LTC_FALLTHROUGH; /* FALLTHROUGH */ + case 3: s_pi3(p, uk+t); --n; LTC_FALLTHROUGH; /* FALLTHROUGH */ + case 2: s_pi2(p, uk+t); --n; LTC_FALLTHROUGH; /* FALLTHROUGH */ case 1: s_pi1(p); --n; break; case 0: return; } diff --git a/src/ciphers/twofish/twofish.c b/src/ciphers/twofish/twofish.c index 2507796a..9fb6e24f 100644 --- a/src/ciphers/twofish/twofish.c +++ b/src/ciphers/twofish/twofish.c @@ -250,19 +250,19 @@ static void h_func(const unsigned char *in, unsigned char *out, const unsigned c y[1] = (unsigned char)(sbox(0, (ulong32)y[1]) ^ M[4 * (6 + offset) + 1]); y[2] = (unsigned char)(sbox(0, (ulong32)y[2]) ^ M[4 * (6 + offset) + 2]); y[3] = (unsigned char)(sbox(1, (ulong32)y[3]) ^ M[4 * (6 + offset) + 3]); - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 3: y[0] = (unsigned char)(sbox(1, (ulong32)y[0]) ^ M[4 * (4 + offset) + 0]); y[1] = (unsigned char)(sbox(1, (ulong32)y[1]) ^ M[4 * (4 + offset) + 1]); y[2] = (unsigned char)(sbox(0, (ulong32)y[2]) ^ M[4 * (4 + offset) + 2]); y[3] = (unsigned char)(sbox(0, (ulong32)y[3]) ^ M[4 * (4 + offset) + 3]); - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 2: y[0] = (unsigned char)(sbox(1, sbox(0, sbox(0, (ulong32)y[0]) ^ M[4 * (2 + offset) + 0]) ^ M[4 * (0 + offset) + 0])); y[1] = (unsigned char)(sbox(0, sbox(0, sbox(1, (ulong32)y[1]) ^ M[4 * (2 + offset) + 1]) ^ M[4 * (0 + offset) + 1])); y[2] = (unsigned char)(sbox(1, sbox(1, sbox(0, (ulong32)y[2]) ^ M[4 * (2 + offset) + 2]) ^ M[4 * (0 + offset) + 2])); y[3] = (unsigned char)(sbox(0, sbox(1, sbox(1, (ulong32)y[3]) ^ M[4 * (2 + offset) + 3]) ^ M[4 * (0 + offset) + 3])); - /* FALLTHROUGH */ + break; } mds_mult(y, out); } diff --git a/src/headers/tomcrypt_cfg.h b/src/headers/tomcrypt_cfg.h index 14b81d87..13187813 100644 --- a/src/headers/tomcrypt_cfg.h +++ b/src/headers/tomcrypt_cfg.h @@ -412,6 +412,9 @@ typedef unsigned long ltc_mp_digit; # define LTC_ATTRIBUTE(x) #endif +#if __has_attribute(fallthrough) +# define LTC_FALLTHROUGH LTC_ATTRIBUTE((fallthrough)) +#endif #if __has_attribute(target) # define LTC_TARGET(x) LTC_ATTRIBUTE((target(x))) #endif diff --git a/src/misc/adler32.c b/src/misc/adler32.c index 985f2a62..265977d5 100644 --- a/src/misc/adler32.c +++ b/src/misc/adler32.c @@ -87,16 +87,16 @@ void adler32_finish(const adler32_state *ctx, void *hash, unsigned long size) switch (size) { default: h[3] = ctx->s[0] & 0x0ff; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 3: h[2] = (ctx->s[0] >> 8) & 0x0ff; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 2: h[1] = ctx->s[1] & 0x0ff; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 1: h[0] = (ctx->s[1] >> 8) & 0x0ff; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 0: ; } diff --git a/src/misc/padding/padding_depad.c b/src/misc/padding/padding_depad.c index 8afed1a4..83c7c13f 100644 --- a/src/misc/padding/padding_depad.c +++ b/src/misc/padding/padding_depad.c @@ -52,7 +52,7 @@ int padding_depad(const unsigned char *data, unsigned long *length, unsigned lon switch (type) { case LTC_PAD_ANSI_X923: pad = 0x0; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case LTC_PAD_PKCS7: for (n = unpadded_length; n < padded_length - 1; ++n) { data_xor_pad |= data[n] ^ pad; diff --git a/src/misc/padding/padding_pad.c b/src/misc/padding/padding_pad.c index 7d8bbbad..b229a2a7 100644 --- a/src/misc/padding/padding_pad.c +++ b/src/misc/padding/padding_pad.c @@ -28,7 +28,7 @@ static int s_padding_padded_length(unsigned long *length, unsigned long mode) t = 0; break; } - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case LTC_PAD_PKCS7: case LTC_PAD_ONE_AND_ZERO: case LTC_PAD_ZERO_ALWAYS: diff --git a/src/misc/pkcs12/pkcs12_utf8_to_utf16.c b/src/misc/pkcs12/pkcs12_utf8_to_utf16.c index bcf2023b..75edecc3 100644 --- a/src/misc/pkcs12/pkcs12_utf8_to_utf16.c +++ b/src/misc/pkcs12/pkcs12_utf8_to_utf16.c @@ -30,15 +30,15 @@ int pkcs12_utf8_to_utf16(const unsigned char *in, unsigned long inlen, if (in + extra >= in_end) goto ERROR; switch (extra) { case 5: ch += *in++; ch <<= 6; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 4: ch += *in++; ch <<= 6; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 3: ch += *in++; ch <<= 6; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 2: ch += *in++; ch <<= 6; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 1: ch += *in++; ch <<= 6; - /* FALLTHROUGH */ + LTC_FALLTHROUGH; /* FALLTHROUGH */ case 0: ch += *in++; } ch -= offset[extra];