https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82044
Bug ID: 82044 Summary: runtime signed integer overflow in check_mem_read_rtx() and all_positions_needed_p() in dse.c Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- When compiled with today's top of trunk (GCC 8.0) configured for x86_64-linux --with-build-config=bootstrap-ubsan the following test case triggers a runtime error in the check_mem_read_rtx() and all_positions_needed_p() functions in dse.c. $ cat t.c && gcc -O2 -S -Wall -ftracer t.c typedef __SIZE_TYPE__ size_t; extern void* memcpy (void* restrict, const void* restrict, size_t); #define SSIZE_MAX (__SIZE_MAX__ / 2) void sink (void*); void f (char *p, __SIZE_TYPE__ n) { if (n < SSIZE_MAX - 2 || SSIZE_MAX < n) n = SSIZE_MAX - 2; memcpy (p, p + n, 3); } /src/gcc/git/gcc/dse.c:2122:18: runtime error: signed integer overflow: 1 + 9223372036854775807 cannot be represented in type 'long int' /src/gcc/git/gcc/dse.c:1252:61: runtime error: shift exponent -1 is negative