public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c/104205] New: Signed overflow in case label reports confusing warning with -Wpedantic @ 2022-01-24 15:00 stephen.wassell at sophos dot com 2022-01-24 17:23 ` [Bug c/104205] " pinskia at gcc dot gnu.org ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: stephen.wassell at sophos dot com @ 2022-01-24 15:00 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104205 Bug ID: 104205 Summary: Signed overflow in case label reports confusing warning with -Wpedantic Product: gcc Version: 11.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: stephen.wassell at sophos dot com Target Milestone: --- When compiling the following code with "gcc -Wpedantic": int convert(int err) { switch (err) { case 1 << 31: // signed overflow - undefined behaviour return 0; default: return 1; } } int main() { return convert(1 << 31); } It reports a confusingly worded warning since version 6. It should say something about undefined behaviour instead. Should there also be a warning for the other use of 1 << 31? <source>: In function 'convert': <source>:5:9: warning: case label is not an integer constant expression [-Wpedantic] 5 | case 1 << 31: | ^~~~ Seen on gcc (Ubuntu 11.2.0-7ubuntu2) 11.2.0 x64, and multiple versions on Compiler Explorer. https://godbolt.org/z/4Tr1qxaqv ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c/104205] Signed overflow in case label reports confusing warning with -Wpedantic 2022-01-24 15:00 [Bug c/104205] New: Signed overflow in case label reports confusing warning with -Wpedantic stephen.wassell at sophos dot com @ 2022-01-24 17:23 ` pinskia at gcc dot gnu.org 2022-01-24 17:28 ` pinskia at gcc dot gnu.org ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2022-01-24 17:23 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104205 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- URL|https://godbolt.org/z/4Tr1q | |xaqv | Keywords| |diagnostic --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- https://godbolt.org/z/4Tr1qxaqv ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c/104205] Signed overflow in case label reports confusing warning with -Wpedantic 2022-01-24 15:00 [Bug c/104205] New: Signed overflow in case label reports confusing warning with -Wpedantic stephen.wassell at sophos dot com 2022-01-24 17:23 ` [Bug c/104205] " pinskia at gcc dot gnu.org @ 2022-01-24 17:28 ` pinskia at gcc dot gnu.org 2022-01-24 17:37 ` stephen.wassell at sophos dot com ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2022-01-24 17:28 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104205 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- > It should say something about undefined behaviour instead. The problem is for integer constants, it is not undefined at runtime but rather invalid code at compile time. >Should there also be a warning for the other use of 1 << 31? I think you misunderstood the warning/error fully. In C99-C17, 1<<31 is not an integer constant expression as there is an overflow. But it is still valid, just undefined at runtime if used where an integer constant expression is not required. case statements require an integer constant expression. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c/104205] Signed overflow in case label reports confusing warning with -Wpedantic 2022-01-24 15:00 [Bug c/104205] New: Signed overflow in case label reports confusing warning with -Wpedantic stephen.wassell at sophos dot com 2022-01-24 17:23 ` [Bug c/104205] " pinskia at gcc dot gnu.org 2022-01-24 17:28 ` pinskia at gcc dot gnu.org @ 2022-01-24 17:37 ` stephen.wassell at sophos dot com 2022-01-24 20:07 ` egallager at gcc dot gnu.org 2022-01-24 22:46 ` joseph at codesourcery dot com 4 siblings, 0 replies; 6+ messages in thread From: stephen.wassell at sophos dot com @ 2022-01-24 17:37 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104205 --- Comment #3 from Stephen Wassell <stephen.wassell at sophos dot com> --- Thank you for the response! I think the cause of our confusion was that we were focusing on "constant" in the warning message rather than "integer". Our original code had a few layers of macros so the signed overflow wasn't obvious at first. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c/104205] Signed overflow in case label reports confusing warning with -Wpedantic 2022-01-24 15:00 [Bug c/104205] New: Signed overflow in case label reports confusing warning with -Wpedantic stephen.wassell at sophos dot com ` (2 preceding siblings ...) 2022-01-24 17:37 ` stephen.wassell at sophos dot com @ 2022-01-24 20:07 ` egallager at gcc dot gnu.org 2022-01-24 22:46 ` joseph at codesourcery dot com 4 siblings, 0 replies; 6+ messages in thread From: egallager at gcc dot gnu.org @ 2022-01-24 20:07 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104205 Eric Gallager <egallager at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |egallager at gcc dot gnu.org --- Comment #4 from Eric Gallager <egallager at gcc dot gnu.org> --- Maybe the warning text could be updated to include what's actually being used for the case label after macro expansion etc.? e.g.: <source>:5:9: warning: case label '1 << 31' is not an integer constant expression [-Wpedantic] ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c/104205] Signed overflow in case label reports confusing warning with -Wpedantic 2022-01-24 15:00 [Bug c/104205] New: Signed overflow in case label reports confusing warning with -Wpedantic stephen.wassell at sophos dot com ` (3 preceding siblings ...) 2022-01-24 20:07 ` egallager at gcc dot gnu.org @ 2022-01-24 22:46 ` joseph at codesourcery dot com 4 siblings, 0 replies; 6+ messages in thread From: joseph at codesourcery dot com @ 2022-01-24 22:46 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104205 --- Comment #5 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- Printing an expression within the diagnostic message is generally problematic, but it might be good to change the caret location to point to the expression rather than the keyword "case" (or to a range covering both the keyword and the expression). ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-01-24 22:46 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-01-24 15:00 [Bug c/104205] New: Signed overflow in case label reports confusing warning with -Wpedantic stephen.wassell at sophos dot com 2022-01-24 17:23 ` [Bug c/104205] " pinskia at gcc dot gnu.org 2022-01-24 17:28 ` pinskia at gcc dot gnu.org 2022-01-24 17:37 ` stephen.wassell at sophos dot com 2022-01-24 20:07 ` egallager at gcc dot gnu.org 2022-01-24 22:46 ` joseph at codesourcery dot com
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).