re PR tree-optimization/17749 (ICE with recursive function)
PR tree-optimization/17749 * tree-tailcall.c (find_tail_calls): Check that parameter is a gimple_reg. From-SVN: r88689
This commit is contained in:
parent
ca05904340
commit
14de86fa0a
@ -1,3 +1,9 @@
|
||||
2004-10-07 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR tree-optimization/17749
|
||||
* tree-tailcall.c (find_tail_calls): Check that parameter is
|
||||
a gimple_reg.
|
||||
|
||||
2004-10-07 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
* config/ia64/ia64.c: Fix a comment typo.
|
||||
|
@ -431,15 +431,27 @@ find_tail_calls (basic_block bb, struct tailcall **ret)
|
||||
param = TREE_CHAIN (param), args = TREE_CHAIN (args))
|
||||
{
|
||||
tree arg = TREE_VALUE (args);
|
||||
if (param != arg
|
||||
/* Make sure there are no problems with copying. Note we must
|
||||
if (param != arg)
|
||||
{
|
||||
/* Make sure there are no problems with copying. The parameter
|
||||
have a copyable type and the two arguments must have reasonably
|
||||
equivalent types. The latter requirement could be relaxed if
|
||||
we emitted a suitable type conversion statement. */
|
||||
&& (!is_gimple_reg_type (TREE_TYPE (param))
|
||||
if (!is_gimple_reg_type (TREE_TYPE (param))
|
||||
|| !lang_hooks.types_compatible_p (TREE_TYPE (param),
|
||||
TREE_TYPE (arg))))
|
||||
break;
|
||||
TREE_TYPE (arg)))
|
||||
break;
|
||||
|
||||
/* The parameter should be a real operand, so that phi node
|
||||
created for it at the start of the function has the meaning
|
||||
of copying the value. This test implies is_gimple_reg_type
|
||||
from the previous condition, however this one could be
|
||||
relaxed by being more careful with copying the new value
|
||||
of the parameter (emitting appropriate MODIFY_EXPR and
|
||||
updating the virtual operands). */
|
||||
if (!is_gimple_reg (param))
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!args && !param)
|
||||
tail_recursion = true;
|
||||
|
Loading…
Reference in New Issue
Block a user