caller-save.c (reg_save_code): After HARD_REGNO_MODE_OK check fails...

* caller-save.c (reg_save_code): After HARD_REGNO_MODE_OK check fails,
	assert that REG is a hard register number before using it as an index.

From-SVN: r166434
This commit is contained in:
Joern Rennecke 2010-11-08 15:07:32 +00:00 committed by Joern Rennecke
parent f79e1b0f8d
commit f57e2756ac
2 changed files with 14 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2010-11-08 Joern Rennecke <amylaar@spamcop.net>
* caller-save.c (reg_save_code): After HARD_REGNO_MODE_OK check fails,
assert that REG is a hard register number before using it as an index.
2010-11-08 Eric Botcazou <ebotcazou@adacore.com>
PR target/46208

View File

@ -116,11 +116,15 @@ reg_save_code (int reg, enum machine_mode mode)
if (cached_reg_save_code[reg][mode])
return cached_reg_save_code[reg][mode];
if (!HARD_REGNO_MODE_OK (reg, mode))
{
cached_reg_save_code[reg][mode] = -1;
cached_reg_restore_code[reg][mode] = -1;
return -1;
}
{
/* Depending on how HARD_REGNO_MODE_OK is defined, range propagation
might deduce here that reg >= FIRST_PSEUDO_REGISTER. So the assert
below silences a warning. */
gcc_assert (reg < FIRST_PSEUDO_REGISTER);
cached_reg_save_code[reg][mode] = -1;
cached_reg_restore_code[reg][mode] = -1;
return -1;
}
/* Update the register number and modes of the register
and memory operand. */