Commit 3a3a8086 by Kyrylo Tkachov

[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
parent 97202774
2017-12-18 Jakub Jelinek <jakub@redhat.com>
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-19 Jakub Jelinek <jakub@redhat.com>
PR middle-end/81914
* predict.c (zero_one_minusone): New function.
......@@ -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) \
......
2017-12-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/82975
* gcc.dg/pr82975.c: New test.
2017-12-19 Marek Polacek <polacek@redhat.com>
PR c++/83489
......
/* PR target/82975. */
/* { dg-do compile } */
/* { dg-options "-mtune=cortex-a57 -fno-sched-pressure -O2" } */
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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment