Fix handling of unknown sizes in rtx_addr_can_trap_p
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 16 Nov 2016 10:20:23 +0000 (10:20 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 16 Nov 2016 10:20:23 +0000 (10:20 +0000)
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.

gcc/
2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

* rtlanal.c (rtx_addr_can_trap_p_1): Handle unknown sizes.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r242476

gcc/ChangeLog
gcc/rtlanal.c

index db0f8315998d866f0b33d00ce0ebb94b6bc4f2c4..fe1d9c3b257063d71e0154868fa03454ad70be3e 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * rtlanal.c (rtx_addr_can_trap_p_1): Handle unknown sizes.
+
 2016-11-16  Richard Sandiford  <richard.sandiford@arm.com>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index ded337b2ac9671fe373126075c440c5613c758ed..f07a77ae6f2ab048bb8f183e6a5d29c113a3ad92 100644 (file)
@@ -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)
            {