https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68971
--- Comment #4 from Paul Eggert <eggert at gnu dot org> ---
(In reply to Martin Sebor from comment #1)
> constant expressions are evaluated during translation
This is not a constant expression. Not that that should matter. For example:
enum { a = (1 ? 0 : 1 / 0) };
enum { b = (1 ? 0 : 0x7fffffff * 0x7fffffff) };
Both integer constant expressions are valid C, and GCC (correctly) doesn't warn
about either of them.
> The program is incorrect and the warning helps find the bug.
No, the program has perfectly well-defined runtime behavior in GNU C because
the integer overflow is not evaluated. There is no bug here, and GCC's warning
is a false alarm.
This problem was occurring in gnulib, and we have worked around it in gnulib by
disabling -Woverflow in the affected translation unit. As a practical matter it
would be better if -Woverflow did not generate false alarms in cases like this,
as the false alarms will cause -Woverflow to be disabled in more places. Which
would be too bad, as __builtin_mul_overflow etc. are likely to be used in
programs where -Woverflow would otherwise be quite useful.