From: Kyrylo Tkachov Date: Tue, 9 Jan 2018 11:38:04 +0000 (+0000) Subject: [arm] PR target/82975: Guard against reg_renumber being NULL in arm.h X-Git-Tag: releases/gcc-6.5.0~596 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bae9ea06d7e465b60c8301e5f05c49b9ecdcbc5f;p=thirdparty%2Fgcc.git [arm] PR target/82975: Guard against reg_renumber being NULL in arm.h Backport from mainline 2017-12-19 Kyrylo Tkachov 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: r256377 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30711960ee57..997bb29c592d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-01-09 Kyrylo Tkachov + + Backport from mainline + 2017-12-19 Kyrylo Tkachov + + PR target/82975 + * config/arm/arm.h (TEST_REGNO): Check reg_renumber is set before + accessing it. Adjust comment. + 2017-12-17 John David Anglin Backport from mainline diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 6902ea301c9c..def018079a44 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -1677,12 +1677,10 @@ enum arm_auto_incmodes /* These assume that REGNO is a hard or pseudo reg number. They give nonzero only if REGNO is a hard reg of the suitable class - or a pseudo reg currently allocated to a suitable hard reg. - Since they use reg_renumber, they are safe only once reg_renumber - has been allocated, which happens in reginfo.c during register - allocation. */ + or a pseudo reg currently allocated to a suitable hard reg. */ #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) \ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 89d3c776dff4..650741746ebd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2018-01-09 Kyrylo Tkachov + + Backport from mainline + 2017-12-19 Kyrylo Tkachov + + PR target/82975 + * gcc.dg/pr82975.c: New test. + 2018-01-02 Thomas Koenig Backport from 7-branch diff --git a/gcc/testsuite/gcc.dg/pr82975.c b/gcc/testsuite/gcc.dg/pr82975.c new file mode 100644 index 000000000000..422ba6c6855f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr82975.c @@ -0,0 +1,20 @@ +/* PR target/82975. */ +/* { dg-do compile } */ +/* { dg-options "-fno-sched-pressure -O2" } */ +/* { dg-additional-options "-mtune=cortex-a57" { target arm*-*-* aarch64*-*-* } } */ + +typedef __SIZE_TYPE__ size_t; + +struct S1 +{ + char pad1; + char val; + short pad2; +}; + +extern char t[256]; + +void foo (struct S1 a, size_t i) +{ + t[i] = a.val; +}