If the size passed in to rtx_addr_can_trap_p was zero, the frame handling would get the size from the mode instead. However, this too can be zero if the mode is BLKmode, i.e. if we have a BLKmode memory reference with no MEM_SIZE (which should be rare these days). This meant that the conditions for a 4-byte access at offset X were stricter than those for an access of unknown size at offset X.
This patch checks whether the size is still zero, as the SYMBOL_REF handling does. Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install? Thanks, Richard [ This patch is part of the SVE series posted here: https://gcc.gnu.org/ml/gcc/2016-11/msg00030.html ] gcc/ 2016-11-15 Richard Sandiford <richard.sandif...@arm.com> Alan Hayward <alan.hayw...@arm.com> David Sherwood <david.sherw...@arm.com> * rtlanal.c (rtx_addr_can_trap_p_1): Handle unknown sizes. diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index a9d3960..889b14d 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -543,6 +543,8 @@ rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size, if (size == 0) size = GET_MODE_SIZE (mode); + if (size == 0) + return 1; if (x == frame_pointer_rtx) {