]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[arm] PR target/82975: Guard against reg_renumber being NULL in arm.h
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Tue, 9 Jan 2018 11:38:04 +0000 (11:38 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Tue, 9 Jan 2018 11:38:04 +0000 (11:38 +0000)
Backport from mainline
2017-12-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

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

gcc/ChangeLog
gcc/config/arm/arm.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr82975.c [new file with mode: 0644]

index 30711960ee576bfa76d84e79454239aa77e50cc4..997bb29c592d53120fb3a20c56180b205fec00dd 100644 (file)
@@ -1,3 +1,12 @@
+2018-01-09  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2017-12-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       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  <danglin@gcc.gnu.org>
 
        Backport from mainline
index 6902ea301c9c11716b915ac9d008043137cbf384..def018079a4408d5fa2a51099059a08f33bc83da 100644 (file)
@@ -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)                 \
index 89d3c776dff4e9a8f24add4fadf6e15aee8e80a6..650741746ebdcbb647d548b9d4e832e29cf14ac8 100644 (file)
@@ -1,3 +1,11 @@
+2018-01-09  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2017-12-19  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR target/82975
+       * gcc.dg/pr82975.c: New test.
+
 2018-01-02  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        Backport from 7-branch
diff --git a/gcc/testsuite/gcc.dg/pr82975.c b/gcc/testsuite/gcc.dg/pr82975.c
new file mode 100644 (file)
index 0000000..422ba6c
--- /dev/null
@@ -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;
+}