Commit 6f2ba390 by Maxim Kuvyrkov Committed by Maxim Kuvyrkov

re PR target/27863 (ICE in check_cfg, at haifa-sched.c:4615)

2006-06-13  Maxim Kuvyrkov  <mkuvyrkov@ispras.ru>

	* haifa-sched.c (unlink_other_notes, unlink_line_notes): Fix the patch
	for PR target/27863.

2006-06-13  Maxim Kuvyrkov  <mkuvyrkov@ispras.ru>

	* gcc.c-torture/compile/20060609-1.c: New test.
	
	PR target/27863
	* gcc.c-torture/compile/pr27863.c: New test.

From-SVN: r114604
parent c68ecf64
2006-06-13 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
* haifa-sched.c (unlink_other_notes, unlink_line_notes): Fix the patch
for PR target/27863.
2006-06-13 Richard Guenther <rguenther@suse.de> 2006-06-13 Richard Guenther <rguenther@suse.de>
PR middle-end/27536 PR middle-end/27536
......
...@@ -1251,13 +1251,16 @@ unlink_other_notes (rtx insn, rtx tail) ...@@ -1251,13 +1251,16 @@ unlink_other_notes (rtx insn, rtx tail)
if (next) if (next)
PREV_INSN (next) = prev; PREV_INSN (next) = prev;
/* Basic block can begin with either LABEL or if (bb)
NOTE_INSN_BASIC_BLOCK. */ {
gcc_assert (BB_HEAD (bb) != insn); /* Basic block can begin with either LABEL or
NOTE_INSN_BASIC_BLOCK. */
gcc_assert (BB_HEAD (bb) != insn);
/* Check if we are removing last insn in the BB. */ /* Check if we are removing last insn in the BB. */
if (BB_END (bb) == insn) if (BB_END (bb) == insn)
BB_END (bb) = prev; BB_END (bb) = prev;
}
/* See sched_analyze to see how these are handled. */ /* See sched_analyze to see how these are handled. */
if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_BEG if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_BEG
...@@ -1283,7 +1286,7 @@ unlink_line_notes (rtx insn, rtx tail) ...@@ -1283,7 +1286,7 @@ unlink_line_notes (rtx insn, rtx tail)
{ {
rtx prev = PREV_INSN (insn); rtx prev = PREV_INSN (insn);
while (insn != tail && NOTE_P (insn)) while (insn != tail && NOTE_NOT_BB_P (insn))
{ {
rtx next = NEXT_INSN (insn); rtx next = NEXT_INSN (insn);
...@@ -1297,13 +1300,16 @@ unlink_line_notes (rtx insn, rtx tail) ...@@ -1297,13 +1300,16 @@ unlink_line_notes (rtx insn, rtx tail)
if (next) if (next)
PREV_INSN (next) = prev; PREV_INSN (next) = prev;
/* Basic block can begin with either LABEL or if (bb)
NOTE_INSN_BASIC_BLOCK. */ {
gcc_assert (BB_HEAD (bb) != insn); /* Basic block can begin with either LABEL or
NOTE_INSN_BASIC_BLOCK. */
gcc_assert (BB_HEAD (bb) != insn);
/* Check if we are removing last insn in the BB. */ /* Check if we are removing last insn in the BB. */
if (BB_END (bb) == insn) if (BB_END (bb) == insn)
BB_END (bb) = prev; BB_END (bb) = prev;
}
/* Record line-number notes so they can be reused. */ /* Record line-number notes so they can be reused. */
LINE_NOTE (insn) = insn; LINE_NOTE (insn) = insn;
......
2006-06-13 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
* gcc.c-torture/compile/20060609-1.c: New test.
PR target/27863
* gcc.c-torture/compile/pr27863.c: New test.
2006-06-13 Richard Guenther <rguenther@suse.de> 2006-06-13 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27830 PR tree-optimization/27830
/* This test used to ICE on IA64. */
int __strspn_c2 (__const char *__s, int __accept1, int __accept2)
{
register long unsigned int __result = 0;
while (__s[__result] == __accept1 || __s[__result] == __accept2)
return __result;
}
/* This test used to ICE on IA64. */
long stack[100];
int main(int argc,char**argv,char **envp)
{
long *esp=stack;
static void* jarray[]={ &&KeyCtrlKV };
*++esp=(long)&&_loc0;
goto SetTermStruc;
_loc0:;
*++esp=(long)&&_loc1;
_loc1:;
*++esp=(long)&&_loc35;
_loc35:;
goto *(*esp--);
*++esp=(long)&&_loc36;
_loc36:;
*++esp=(long)&&_loc37;
_loc37:;
KeyCtrlKV:
*++esp=(long)&&_loc66;
_loc66:;
*++esp=(long)&&_loc106;
_loc106:;
*++esp=(long)&&_loc119;
_loc119:;
SetTermStruc:
goto *(*esp--);
}
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