re PR tree-optimization/30984 (ICE with computed goto and constants)
* tree-cfg.c (find_taken_edge): Tighten conditions for optimizing computed gotos. * PR tree-optimization/30984 * gcc.c-torture/pr30984.c: New test. From-SVN: r123067
This commit is contained in:
parent
7270dd8e8d
commit
1799efef2c
|
@ -1,3 +1,8 @@
|
|||
2007-03-19 Jeff Law <law@redhat.com>
|
||||
|
||||
* tree-cfg.c (find_taken_edge): Tighten conditions for
|
||||
optimizing computed gotos.
|
||||
|
||||
2007-03-19 Michael Matz <matz@suse.de>
|
||||
|
||||
* builtins.c (expand_builtin_sync_operation,
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2007-03-19 Jeff Law <law@redhat.com>
|
||||
|
||||
* PR tree-optimization/30984
|
||||
* gcc.c-torture/pr30984.c: New test.
|
||||
|
||||
2007-03-19 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
Richard Guenther <rguenther@suse.de>
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
int fs_exec(int ino)
|
||||
{
|
||||
void *src = 0;
|
||||
if (ino)
|
||||
src = (void*)0xe000;
|
||||
goto *src;
|
||||
}
|
|
@ -2039,7 +2039,18 @@ find_taken_edge (basic_block bb, tree val)
|
|||
return find_taken_edge_switch_expr (bb, val);
|
||||
|
||||
if (computed_goto_p (stmt))
|
||||
{
|
||||
/* Only optimize if the argument is a label, if the argument is
|
||||
not a label then we can not construct a proper CFG.
|
||||
|
||||
It may be the case that we only need to allow the LABEL_REF to
|
||||
appear inside an ADDR_EXPR, but we also allow the LABEL_REF to
|
||||
appear inside a LABEL_EXPR just to be safe. */
|
||||
if ((TREE_CODE (val) == ADDR_EXPR || TREE_CODE (val) == LABEL_EXPR)
|
||||
&& TREE_CODE (TREE_OPERAND (val, 0)) == LABEL_DECL)
|
||||
return find_taken_edge_computed_goto (bb, TREE_OPERAND (val, 0));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue