From abc12a832c393402a6b68a00d41c1ab12c53707c Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 11 Nov 2021 15:58:44 -0800 Subject: [PATCH] Revert "Add and use `SDL_FALLTHROUGH` for fallthroughs" This reverts commit 66a08aa3914a98667f212e79b4f0b9453203d656. This causes problems with older compilers: https://github.com/libsdl-org/SDL/pull/4791#issuecomment-966630997 --- include/SDL_stdinc.h | 20 ++++++++++++++++---- include/begin_code.h | 19 ------------------- src/audio/SDL_wave.c | 4 ++-- src/render/software/SDL_draw.h | 8 ++++---- src/stdlib/SDL_iconv.c | 4 ++-- src/stdlib/SDL_string.c | 12 ++++++------ src/video/SDL_blit.h | 24 ++++++++++++------------ src/video/SDL_fillrect.c | 12 ++++++------ src/video/SDL_pixels.c | 2 +- src/video/directfb/SDL_DirectFB_WM.c | 2 +- src/video/directfb/SDL_DirectFB_events.c | 2 +- src/video/windows/SDL_windowsevents.c | 1 - test/controllermap.c | 4 ++-- test/testgamecontroller.c | 2 +- test/testjoystick.c | 2 +- 15 files changed, 55 insertions(+), 63 deletions(-) diff --git a/include/SDL_stdinc.h b/include/SDL_stdinc.h index 15a635443..c00374d12 100644 --- a/include/SDL_stdinc.h +++ b/include/SDL_stdinc.h @@ -496,13 +496,25 @@ SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) if (dwords == 0) { return; } + + /* !!! FIXME: there are better ways to do this, but this is just to clean this up for now. */ + #ifdef __clang__ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wimplicit-fallthrough" + #endif + switch (dwords % 4) { - case 0: do { *_p++ = _val; SDL_FALLTHROUGH; - case 3: *_p++ = _val; SDL_FALLTHROUGH; - case 2: *_p++ = _val; SDL_FALLTHROUGH; - case 1: *_p++ = _val; + case 0: do { *_p++ = _val; /* fallthrough */ + case 3: *_p++ = _val; /* fallthrough */ + case 2: *_p++ = _val; /* fallthrough */ + case 1: *_p++ = _val; /* fallthrough */ } while ( --_n ); } + + #ifdef __clang__ + #pragma clang diagnostic pop + #endif + #endif } diff --git a/include/begin_code.h b/include/begin_code.h index b82119519..37bf9750f 100644 --- a/include/begin_code.h +++ b/include/begin_code.h @@ -164,22 +164,3 @@ #endif #endif /* NULL */ #endif /* ! Mac OS X - breaks precompiled headers */ - -#ifndef SDL_FALLTHROUGH -#if (defined(__cplusplus) && __cplusplus >= 201703L) || \ - (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) -#define SDL_FALLTHROUGH [[fallthrough]] -#else -#ifdef __has_attribute -#define _HAS_FALLTHROUGH __has_attribute(__fallthrough__) -#else -#define _HAS_FALLTHROUGH 0 -#endif /* __has_attribute */ -#if _HAS_FALLTHROUGH -#define SDL_FALLTHROUGH __attribute__((__fallthrough__)) -#else -#define SDL_FALLTHROUGH do {} while (0) /* fallthrough */ -#endif /* _HAS_FALLTHROUGH */ -#undef _HAS_FALLTHROUGH -#endif /* C++17 or C2x */ -#endif /* SDL_FALLTHROUGH not defined */ diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c index bf9fb542b..88204fdbe 100644 --- a/src/audio/SDL_wave.c +++ b/src/audio/SDL_wave.c @@ -1715,7 +1715,7 @@ WaveCheckFormat(WaveFile *file, size_t datalength) if (file->facthint == FactStrict && file->fact.status <= 0) { return SDL_SetError("Missing fact chunk in WAVE file"); } - SDL_FALLTHROUGH; + /* fallthrough */ case PCM_CODE: /* All supported formats require a non-zero bit depth. */ if (file->chunk.size < 16) { @@ -1854,7 +1854,7 @@ WaveLoad(SDL_RWops *src, WaveFile *file, SDL_AudioSpec *spec, Uint8 **audio_buf, RIFFend = RIFFchunk.position + SDL_MAX_UINT32; break; } - SDL_FALLTHROUGH; + /* fallthrough */ case RiffSizeForce: RIFFend = RIFFchunk.position + RIFFchunk.length; RIFFlengthknown = SDL_TRUE; diff --git a/src/render/software/SDL_draw.h b/src/render/software/SDL_draw.h index 5c63954f6..d9abb940b 100644 --- a/src/render/software/SDL_draw.h +++ b/src/render/software/SDL_draw.h @@ -618,10 +618,10 @@ do { \ while (height--) { \ { int n = (width+3)/4; \ switch (width & 3) { \ - case 0: do { op; pixel++; SDL_FALLTHROUGH; \ - case 3: op; pixel++; SDL_FALLTHROUGH; \ - case 2: op; pixel++; SDL_FALLTHROUGH; \ - case 1: op; pixel++; \ + case 0: do { op; pixel++; /* fallthrough */ \ + case 3: op; pixel++; /* fallthrough */ \ + case 2: op; pixel++; /* fallthrough */ \ + case 1: op; pixel++; /* fallthrough */ \ } while ( --n > 0 ); \ } \ } \ diff --git a/src/stdlib/SDL_iconv.c b/src/stdlib/SDL_iconv.c index 34246bc4f..e235541f3 100644 --- a/src/stdlib/SDL_iconv.c +++ b/src/stdlib/SDL_iconv.c @@ -758,7 +758,7 @@ SDL_iconv(SDL_iconv_t cd, if (ch > 0x10FFFF) { ch = UNKNOWN_UNICODE; } - SDL_FALLTHROUGH; + /* fallthrough */ case ENCODING_UCS4BE: if (ch > 0x7FFFFFFF) { ch = UNKNOWN_UNICODE; @@ -780,7 +780,7 @@ SDL_iconv(SDL_iconv_t cd, if (ch > 0x10FFFF) { ch = UNKNOWN_UNICODE; } - SDL_FALLTHROUGH; + /* fallthrough */ case ENCODING_UCS4LE: if (ch > 0x7FFFFFFF) { ch = UNKNOWN_UNICODE; diff --git a/src/stdlib/SDL_string.c b/src/stdlib/SDL_string.c index 13d6c542e..6922a24a9 100644 --- a/src/stdlib/SDL_string.c +++ b/src/stdlib/SDL_string.c @@ -1275,7 +1275,7 @@ SDL_vsscanf(const char *text, const char *fmt, va_list ap) } } } - SDL_FALLTHROUGH; + /* Fall through to %d handling */ case 'd': if (inttype == DO_LONGLONG) { Sint64 value; @@ -1323,13 +1323,13 @@ SDL_vsscanf(const char *text, const char *fmt, va_list ap) if (radix == 10) { radix = 8; } - SDL_FALLTHROUGH; + /* Fall through to unsigned handling */ case 'x': case 'X': if (radix == 10) { radix = 16; } - SDL_FALLTHROUGH; + /* Fall through to unsigned handling */ case 'u': if (inttype == DO_LONGLONG) { Uint64 value = 0; @@ -1815,7 +1815,7 @@ SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, case 'p': case 'x': info.force_case = SDL_CASE_LOWER; - SDL_FALLTHROUGH; + /* Fall through to 'X' handling */ case 'X': if (info.force_case == SDL_CASE_NOCHANGE) { info.force_case = SDL_CASE_UPPER; @@ -1826,12 +1826,12 @@ SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, if (*fmt == 'p') { inttype = DO_LONG; } - SDL_FALLTHROUGH; + /* Fall through to unsigned handling */ case 'o': if (info.radix == 10) { info.radix = 8; } - SDL_FALLTHROUGH; + /* Fall through to unsigned handling */ case 'u': info.force_sign = SDL_FALSE; if (info.precision >= 0) { diff --git a/src/video/SDL_blit.h b/src/video/SDL_blit.h index 8b28138e9..4b50c7dc3 100644 --- a/src/video/SDL_blit.h +++ b/src/video/SDL_blit.h @@ -479,14 +479,14 @@ do { \ #define DUFFS_LOOP8(pixel_copy_increment, width) \ { int n = (width+7)/8; \ switch (width & 7) { \ - case 0: do { pixel_copy_increment; SDL_FALLTHROUGH; \ - case 7: pixel_copy_increment; SDL_FALLTHROUGH; \ - case 6: pixel_copy_increment; SDL_FALLTHROUGH; \ - case 5: pixel_copy_increment; SDL_FALLTHROUGH; \ - case 4: pixel_copy_increment; SDL_FALLTHROUGH; \ - case 3: pixel_copy_increment; SDL_FALLTHROUGH; \ - case 2: pixel_copy_increment; SDL_FALLTHROUGH; \ - case 1: pixel_copy_increment; \ + case 0: do { pixel_copy_increment; /* fallthrough */ \ + case 7: pixel_copy_increment; /* fallthrough */ \ + case 6: pixel_copy_increment; /* fallthrough */ \ + case 5: pixel_copy_increment; /* fallthrough */ \ + case 4: pixel_copy_increment; /* fallthrough */ \ + case 3: pixel_copy_increment; /* fallthrough */ \ + case 2: pixel_copy_increment; /* fallthrough */ \ + case 1: pixel_copy_increment; /* fallthrough */ \ } while ( --n > 0 ); \ } \ } @@ -495,10 +495,10 @@ do { \ #define DUFFS_LOOP4(pixel_copy_increment, width) \ { int n = (width+3)/4; \ switch (width & 3) { \ - case 0: do { pixel_copy_increment; SDL_FALLTHROUGH; \ - case 3: pixel_copy_increment; SDL_FALLTHROUGH; \ - case 2: pixel_copy_increment; SDL_FALLTHROUGH; \ - case 1: pixel_copy_increment; \ + case 0: do { pixel_copy_increment; /* fallthrough */ \ + case 3: pixel_copy_increment; /* fallthrough */ \ + case 2: pixel_copy_increment; /* fallthrough */ \ + case 1: pixel_copy_increment; /* fallthrough */ \ } while (--n > 0); \ } \ } diff --git a/src/video/SDL_fillrect.c b/src/video/SDL_fillrect.c index 59f6761e0..6385e3ef8 100644 --- a/src/video/SDL_fillrect.c +++ b/src/video/SDL_fillrect.c @@ -145,13 +145,13 @@ SDL_FillRect1(Uint8 * pixels, int pitch, Uint32 color, int w, int h) switch ((uintptr_t) p & 3) { case 1: *p++ = (Uint8) color; - --n; SDL_FALLTHROUGH; + --n; /* fallthrough */ case 2: *p++ = (Uint8) color; - --n; SDL_FALLTHROUGH; + --n; /* fallthrough */ case 3: *p++ = (Uint8) color; - --n; + --n; /* fallthrough */ } SDL_memset4(p, color, (n >> 2)); } @@ -159,11 +159,11 @@ SDL_FillRect1(Uint8 * pixels, int pitch, Uint32 color, int w, int h) p += (n & ~3); switch (n & 3) { case 3: - *p++ = (Uint8) color; SDL_FALLTHROUGH; + *p++ = (Uint8) color; /* fallthrough */ case 2: - *p++ = (Uint8) color; SDL_FALLTHROUGH; + *p++ = (Uint8) color; /* fallthrough */ case 1: - *p++ = (Uint8) color; + *p++ = (Uint8) color; /* fallthrough */ } } pixels += pitch; diff --git a/src/video/SDL_pixels.c b/src/video/SDL_pixels.c index 140216720..8015e0213 100644 --- a/src/video/SDL_pixels.c +++ b/src/video/SDL_pixels.c @@ -333,7 +333,7 @@ SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, if (Rmask == 0) { return SDL_PIXELFORMAT_RGB555; } - SDL_FALLTHROUGH; + /* fallthrough */ case 16: if (Rmask == 0) { return SDL_PIXELFORMAT_RGB565; diff --git a/src/video/directfb/SDL_DirectFB_WM.c b/src/video/directfb/SDL_DirectFB_WM.c index a90f98d66..8dd48a38a 100644 --- a/src/video/directfb/SDL_DirectFB_WM.c +++ b/src/video/directfb/SDL_DirectFB_WM.c @@ -323,7 +323,7 @@ DirectFB_WM_ProcessEvent(_THIS, SDL_Window * window, DFBWindowEvent * evt) } if (window->flags & SDL_WINDOW_MAXIMIZED) return 1; - SDL_FALLTHROUGH; + /* fall through */ default: windata->wm_grab = pos; if (grabbed_window != NULL) diff --git a/src/video/directfb/SDL_DirectFB_events.c b/src/video/directfb/SDL_DirectFB_events.c index c8c3368a8..146bb99ea 100644 --- a/src/video/directfb/SDL_DirectFB_events.c +++ b/src/video/directfb/SDL_DirectFB_events.c @@ -261,7 +261,7 @@ ProcessWindowEvent(_THIS, SDL_Window *sdlwin, DFBWindowEvent * evt) SDL_SendWindowEvent(sdlwin, SDL_WINDOWEVENT_MOVED, evt->x, evt->y); } - SDL_FALLTHROUGH; + /* fall throught */ case DWET_SIZE: /* FIXME: what about < 0 */ evt->w -= (windata->theme.right_size + windata->theme.left_size); diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 2c7426577..d5ffaecd9 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -729,7 +729,6 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } } /* don't break here, fall through to check the wParam like the button presses */ - SDL_FALLTHROUGH; case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MBUTTONUP: diff --git a/test/controllermap.c b/test/controllermap.c index a70764ab9..144c60344 100644 --- a/test/controllermap.c +++ b/test/controllermap.c @@ -562,7 +562,7 @@ WatchJoystick(SDL_Joystick * joystick) if ((event.key.keysym.sym != SDLK_ESCAPE)) { break; } - SDL_FALLTHROUGH; + /* Fall through to signal quit */ case SDL_QUIT: done = SDL_TRUE; break; @@ -755,7 +755,7 @@ main(int argc, char *argv[]) if ((event.key.keysym.sym != SDLK_ESCAPE)) { break; } - SDL_FALLTHROUGH; + /* Fall through to signal quit */ case SDL_QUIT: done = SDL_TRUE; break; diff --git a/test/testgamecontroller.c b/test/testgamecontroller.c index acd6382f7..9cfc61e18 100644 --- a/test/testgamecontroller.c +++ b/test/testgamecontroller.c @@ -394,7 +394,7 @@ loop(void *arg) if (event.key.keysym.sym != SDLK_ESCAPE) { break; } - SDL_FALLTHROUGH; + /* Fall through to signal quit */ case SDL_QUIT: done = SDL_TRUE; break; diff --git a/test/testjoystick.c b/test/testjoystick.c index fc8389ff5..658e11146 100644 --- a/test/testjoystick.c +++ b/test/testjoystick.c @@ -186,7 +186,7 @@ loop(void *arg) (event.key.keysym.sym != SDLK_AC_BACK)) { break; } - SDL_FALLTHROUGH; + /* Fall through to signal quit */ case SDL_FINGERDOWN: case SDL_MOUSEBUTTONDOWN: case SDL_QUIT: