[Bug sanitizer/67662] New: -fsanitize=undefined cries wolf for X - 1 + X when X is 2**30
eggert at gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Sep 21 06:26:00 GMT 2015
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'.
More information about the Gcc-bugs
mailing list