+ /* First, create the temporary for the return value if we need it: for a
+ variable-sized return type if there is no target or if this is slice,
+ because the gimplifier doesn't support these cases; or for a function
+ with copy-in/copy-out parameters if there is no target, because we'll
+ need to preserve the return value before copying back the parameters.
+ This must be done before we push a new binding level around the call
+ as we will pop it before copying the return value. */
+ if (function_call
+ && ((TREE_CODE (TYPE_SIZE (gnu_result_type)) != INTEGER_CST
+ && (!gnu_target || TREE_CODE (gnu_target) == ARRAY_RANGE_REF))
+ || (!gnu_target && TYPE_CI_CO_LIST (gnu_subprog_type))))
+ gnu_retval = create_temporary ("R", gnu_result_type);
+