aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorKyrylo Tkachov <ktkachov@gcc.gnu.org>2017-12-19 16:58:22 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2017-12-19 16:58:22 +0000
commit3a3a8086bed05ffc8d24bb6908e4437bd9e982f7 (patch)
tree51e517e0af38cf0dea1b64d47ade9c0235f32191 /gcc/config
parent972027748c2aa9f59ef1ab534763b0d6ed37b76d (diff)
downloadgcc-3a3a8086bed05ffc8d24bb6908e4437bd9e982f7.zip
gcc-3a3a8086bed05ffc8d24bb6908e4437bd9e982f7.tar.gz
gcc-3a3a8086bed05ffc8d24bb6908e4437bd9e982f7.tar.bz2
[arm] PR target/82975: Guard against reg_renumber being NULL in arm.h
In this bug we ICE when checking REGNO_OK_FOR_INDEX_P on arm during pre-IRA scheduling. This is because REGNO_OK_FOR_INDEX_P ends up checking the reg_renumber array. Before IRA reg_renumber is NULL and thus we segfault. The fix is to guard the use of reg_renumber in the logic in TEST_REGNO in arm.h. On aarch64, for example, we also guard against the reg_renumber == NULL case. This fixes the ICE. I also remove the part of the comment that muses on when reg_renumber is available as with this patch it should now be safe to use at any point. Bootstrapped and tested on arm-none-linux-gnueabihf. PR target/82975 * config/arm/arm.h (TEST_REGNO): Check reg_renumber is set before accessing it. Adjust comment. * gcc.dg/pr82975.c: New test. From-SVN: r255830
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/arm/arm.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index ac51412..a482f03 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -1620,7 +1620,8 @@ enum arm_auto_incmodes
has been allocated, which happens in reginfo.c during register
allocation. */
#define TEST_REGNO(R, TEST, VALUE) \
- ((R TEST VALUE) || ((unsigned) reg_renumber[R] TEST VALUE))
+ ((R TEST VALUE) \
+ || (reg_renumber && ((unsigned) reg_renumber[R] TEST VALUE)))
/* Don't allow the pc to be used. */
#define ARM_REGNO_OK_FOR_BASE_P(REGNO) \