https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117179
--- Comment #2 from Sam James <sjames at gcc dot gnu.org> --- static bool setval_internal (int comind, const char *com, const char *val) { assert (0 <= comind && ((size_t) comind) < countof (commands)); if ((unsigned) comind >= countof (commands)) return NULL; DEBUGP (("Setting %s (%s) to %s\n", com, commands[comind].name, val)); return commands[comind].action (com, val, commands[comind].place); } With -UNDEBUG, the assert() is live and the warning rightly goes away.