re PR target/27571 (alpha: ICE in get_attr_usegp, at config/alpha/alpha.md:171)

PR target/27571
	* config/alpha/alpha.c (alpha_does_function_need_gp): Skip jump
	table data.

	* gcc.c-torture/compile/pr27571.c: New test.

From-SVN: r114130
This commit is contained in:
Falk Hueffner 2006-05-26 14:28:40 +02:00
parent 014057c510
commit 807bdfb6b5
4 changed files with 38 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2006-05-24 Steven Bosscher <steven@gcc.gnu.org>
PR target/27571
* config/alpha/alpha.c (alpha_does_function_need_gp): Skip jump
table data.
2006-05-25 Mark Mitchell <mark@codesourcery.com>
PR c++/20103

View File

@ -7410,6 +7410,7 @@ alpha_does_function_need_gp (void)
for (; insn; insn = NEXT_INSN (insn))
if (INSN_P (insn)
&& ! JUMP_TABLE_DATA_P (insn)
&& GET_CODE (PATTERN (insn)) != USE
&& GET_CODE (PATTERN (insn)) != CLOBBER
&& get_attr_usegp (insn))

View File

@ -1,3 +1,7 @@
2006-05-24 Falk Hueffner <falk@debian.org>
* gcc.c-torture/compile/pr27571.c: New test.
2006-05-26 Paul Thomas <pault@gcc.gnu.org>
PR fortran/27709

View File

@ -0,0 +1,27 @@
/* PR target/27571
alpha_does_function_need_gp did not properly skip jump table insns */
int r3isseparator(int);
void r3isdigit(int);
void r3decimalvalue(int);
void r7todouble(int *storage, int *count) {
int i = 0;
int state = 0;
int cc = 0;
while (i > *count) {
cc = *storage;
switch (state) {
case 0:
if (r3isseparator(cc))
state = 1;
case 1:
r3isdigit(cc);
case 2:
case 5:
case 6:
r3decimalvalue(cc);
}
i++;
}
}