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'.