This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug sanitizer/67662] New: -fsanitize=undefined cries wolf for X - 1 + X when X is 2**30
- From: "eggert at gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 21 Sep 2015 06:26:27 +0000
- Subject: [Bug sanitizer/67662] New: -fsanitize=undefined cries wolf for X - 1 + X when X is 2**30
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67662
Bug ID: 67662
Summary: -fsanitize=undefined cries wolf for X - 1 + X when X
is 2**30
Product: gcc
Version: 5.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: sanitizer
Assignee: unassigned at gcc dot gnu.org
Reporter: eggert at gnu dot org
CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
jakub at gcc dot gnu.org, kcc at gcc dot gnu.org
Target Milestone: ---
Created attachment 36358
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36358&action=edit
Test program illustrating the bug
I uncovered this bug while trying to use -fsanitize=undefined on the tzcode
source.
gcc -fsanitize=undefined (x86-64) reports an error at runtime for the
expression 'X - 1 + X' when X is 2**30, even though that expression does not
overflow. To reproduce the problem, compile and run the attached program u.c
with:
gcc -fsanitize=undefined -static-libubsan -O2 u.c
./a.out
It's a valid program that does not overflow, but the output I get is:
u.c:5:31: runtime error: signed integer overflow: 1073741824 + 1073741824
canno\
t be represented in type 'int'
u.c:5:7: runtime error: signed integer overflow: -2147483648 - 1 cannot be
repr\
esented in type 'int'
There is a similar problem with 2**62 and 'long long'.