diff --git a/src/m_menu.c b/src/m_menu.c
index a0c50966987a62e5776c2f141ade70c524cdf7a3..398e16f44de2cd9cb284a032e85937fee63b36e0 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -71,10 +71,6 @@ int	snprintf(char *str, size_t n, const char *fmt, ...);
 //int	vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
 #endif
 
-#if defined (__GNUC__) && (__GNUC__ >= 4)
-#define FIXUPO0
-#endif
-
 #define SKULLXOFF -32
 #define LINEHEIGHT 16
 #define STRINGHEIGHT 8
@@ -4122,10 +4118,6 @@ static boolean M_AddonsRefresh(void)
 	return false;
 }
 
-#ifdef FIXUPO0
-#pragma GCC optimize ("0")
-#endif
-
 static void M_DrawAddons(void)
 {
 	INT32 x, y;
@@ -4203,6 +4195,9 @@ static void M_DrawAddons(void)
 	// then adjust!
 	if (i < 0)
 	{
+		// This line was originally (m -= i), but GCC very helpfully gives us
+		// a Wstrict-overflow warning during optimization.
+		// i will always be negative here, so let's just add what would have been a double negative!
 		if ((m += abs(i)) > (ssize_t)sizedirmenu)
 			m = sizedirmenu;
 		i = 0;
@@ -4271,10 +4266,6 @@ static void M_DrawAddons(void)
 		V_DrawSmallScaledPatch(x, y + 4, 0, addonsp[NUM_EXT+2]);
 }
 
-#ifdef FIXUPO0
-#pragma GCC reset_options
-#endif
-
 static void M_AddonExec(INT32 ch)
 {
 	if (ch != 'y' && ch != KEY_ENTER)