(preexpand_calls, case CALL_EXPR): Rework to properly avoid expanding

functions returning variable size objects.

From-SVN: r11698
This commit is contained in:
Richard Kenner 1996-04-11 08:24:56 -04:00
parent d80db03db2
commit 43198be7c4
1 changed files with 9 additions and 8 deletions

View File

@ -9422,16 +9422,17 @@ preexpand_calls (exp)
{
case CALL_EXPR:
/* Do nothing if already expanded. */
if (CALL_EXPR_RTL (exp) != 0)
if (CALL_EXPR_RTL (exp) != 0
/* Do nothing if the call returns a variable-sized object. */
|| TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST
/* Do nothing to built-in functions. */
|| (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
&& (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
== FUNCTION_DECL)
&& DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))))
return;
/* Do nothing to built-in functions. */
if (TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR
|| TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) != FUNCTION_DECL
|| ! DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
/* Do nothing if the call returns a variable-sized object. */
|| TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST)
CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
return;
case COMPOUND_EXPR: