https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108845
Bug ID: 108845 Summary: Unnecessary signed integer overflow checks Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: qrzhang at gatech dot edu 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, marxin at gcc dot gnu.org Target Milestone: --- When compiled with "gcc -fsanitize=signed-integer-overflow -O3" (reproducible on the latest trunk version), Gcc will produce ".UBSAN_CHECK_SUB" checks for the following code. ======= void printf(); void main() { int a; for (a = 0; a != -3; a--) printf("%d\n", a); } ======== I noticed that clang could indeed optimize this program to three printf() calls with "-fsanitize=signed-integer-overflow -O3". Therefore, no overflow checks are needed. Is this behavior in GCC expected? Thanks!