public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c/101913] New: -Wstrict-overflow -O3 false alarm on tzdb localtime.c @ 2021-08-14 20:19 eggert at cs dot ucla.edu 2021-08-14 20:31 ` [Bug middle-end/101913] " pinskia at gcc dot gnu.org ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: eggert at cs dot ucla.edu @ 2021-08-14 20:19 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101913 Bug ID: 101913 Summary: -Wstrict-overflow -O3 false alarm on tzdb localtime.c Product: gcc Version: 11.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: eggert at cs dot ucla.edu Target Milestone: --- Created attachment 51304 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51304&action=edit -Wstrict-overflow -O3 false alarms I ran into this problem when compiling tzdb localtime.c with gcc (GCC) 11.2.1 20210728 (Red Hat 11.2.1-1) on x86-64. To reproduce, compile the attached program v.i with: gcc -Wstrict-overflow -O3 -fsanitize=undefined -S v.i The output is: v.i: In function ‘tzloadbody’: v.i:22:1: warning: assuming signed overflow does not occur when simplifying con\ ditional to constant [-Wstrict-overflow] 22 | tzloadbody (struct state *sp, int leapcnt0, int timecnt0) | ^~~~~~~~~~ v.i:29:25: warning: assuming signed overflow does not occur when simplifying co\ nditional to constant [-Wstrict-overflow] 29 | sp->types[i] = at <= 0xffffffffu; | ~~~^~~~~~~~~~~~~~ 1. These diagnostics make no sense, since none of the underlined code involves any operations that can overflow. 2. I looked through the code carefully, and none of the arithmetic operations can possibly overflow. In (result << 8), 'result' is at most 2**32 - 1 and this fits comfortably into 'long'. -1L << 63 is LONG_MIN. "++i" is executed only when i is less than some other int. timecnt++ and leapcnt++ are executed at most INT_MAX times. prevcorr + 1 is evaluated only when prevcorr < corr, and prevcorr - 1 is evaluated only when prevcorr > corr. 3. The diagnostics vanish if you change MYSTERY from 5 to 4 in the first line. This suggests that GCC is somehow getting confused about whether 'long' has 8 bytes (which it does on this platform) or 4 bytes. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug middle-end/101913] -Wstrict-overflow -O3 false alarm on tzdb localtime.c 2021-08-14 20:19 [Bug c/101913] New: -Wstrict-overflow -O3 false alarm on tzdb localtime.c eggert at cs dot ucla.edu @ 2021-08-14 20:31 ` pinskia at gcc dot gnu.org 2021-08-14 22:22 ` eggert at cs dot ucla.edu ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2021-08-14 20:31 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101913 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- >-1L << 63 is LONG_MIN No it is undefined and has an overflow bit on it. You want (long)(-1UL << 63) for it be correct. But the warning is still there. I thought -fsanitize=undefined enabled -fwrapv too ... ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug middle-end/101913] -Wstrict-overflow -O3 false alarm on tzdb localtime.c 2021-08-14 20:19 [Bug c/101913] New: -Wstrict-overflow -O3 false alarm on tzdb localtime.c eggert at cs dot ucla.edu 2021-08-14 20:31 ` [Bug middle-end/101913] " pinskia at gcc dot gnu.org @ 2021-08-14 22:22 ` eggert at cs dot ucla.edu 2021-08-14 22:30 ` eggert at cs dot ucla.edu ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: eggert at cs dot ucla.edu @ 2021-08-14 22:22 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101913 eggert at cs dot ucla.edu changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #51304|0 |1 is obsolete| | --- Comment #2 from eggert at cs dot ucla.edu --- Created attachment 51305 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51305&action=edit -Wstrict-overflow -O3 false alarm example (v2) This updates the example by replacing -1L<<63 with -1-9223372036854775807L, to avoid any undefined behavior in evaluating that constant expression. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug middle-end/101913] -Wstrict-overflow -O3 false alarm on tzdb localtime.c 2021-08-14 20:19 [Bug c/101913] New: -Wstrict-overflow -O3 false alarm on tzdb localtime.c eggert at cs dot ucla.edu 2021-08-14 20:31 ` [Bug middle-end/101913] " pinskia at gcc dot gnu.org 2021-08-14 22:22 ` eggert at cs dot ucla.edu @ 2021-08-14 22:30 ` eggert at cs dot ucla.edu 2021-12-23 5:24 ` pinskia at gcc dot gnu.org 2022-01-31 16:25 ` marxin at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: eggert at cs dot ucla.edu @ 2021-08-14 22:30 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101913 --- Comment #3 from eggert at cs dot ucla.edu --- (In reply to Andrew Pinski from comment #1) > >-1L << 63 is LONG_MIN > No it is undefined and has an overflow bit on it. > You want (long)(-1UL << 63) for it be correct. > But the warning is still there. I updated the attachment to avoid any undefined behavior, by replacing -1L<<63 with -1-9223372036854775807L. As you say, the bug is still there. > I thought -fsanitize=undefined enabled -fwrapv too ... It doesn't. (Perhaps you meant -ftrapv?) ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug middle-end/101913] -Wstrict-overflow -O3 false alarm on tzdb localtime.c 2021-08-14 20:19 [Bug c/101913] New: -Wstrict-overflow -O3 false alarm on tzdb localtime.c eggert at cs dot ucla.edu ` (2 preceding siblings ...) 2021-08-14 22:30 ` eggert at cs dot ucla.edu @ 2021-12-23 5:24 ` pinskia at gcc dot gnu.org 2022-01-31 16:25 ` marxin at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2021-12-23 5:24 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101913 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |needs-bisection --- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Looks to be fixed on the trunk. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug middle-end/101913] -Wstrict-overflow -O3 false alarm on tzdb localtime.c 2021-08-14 20:19 [Bug c/101913] New: -Wstrict-overflow -O3 false alarm on tzdb localtime.c eggert at cs dot ucla.edu ` (3 preceding siblings ...) 2021-12-23 5:24 ` pinskia at gcc dot gnu.org @ 2022-01-31 16:25 ` marxin at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: marxin at gcc dot gnu.org @ 2022-01-31 16:25 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101913 Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|needs-bisection | CC| |aldyh at gcc dot gnu.org, | |marxin at gcc dot gnu.org --- Comment #5 from Martin Liška <marxin at gcc dot gnu.org> --- Fixed with r12-3903-g0288527f47cec669. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-01-31 16:25 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-08-14 20:19 [Bug c/101913] New: -Wstrict-overflow -O3 false alarm on tzdb localtime.c eggert at cs dot ucla.edu 2021-08-14 20:31 ` [Bug middle-end/101913] " pinskia at gcc dot gnu.org 2021-08-14 22:22 ` eggert at cs dot ucla.edu 2021-08-14 22:30 ` eggert at cs dot ucla.edu 2021-12-23 5:24 ` pinskia at gcc dot gnu.org 2022-01-31 16:25 ` marxin at gcc dot gnu.org
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).