From: Richard Kenner Date: Thu, 11 Apr 1996 12:24:56 +0000 (-0400) Subject: (preexpand_calls, case CALL_EXPR): Rework to properly avoid expanding X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=43198be7c4cf49f0ba7fcdbe3d5558b47f0ad0a2;p=gcc.git (preexpand_calls, case CALL_EXPR): Rework to properly avoid expanding functions returning variable size objects. From-SVN: r11698 --- diff --git a/gcc/expr.c b/gcc/expr.c index f470bd58990..851c18eca04 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -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: