(expand_call) [PCC_STATIC_STRUCT_RETURN]:
Always set pcc_struct_value if aggregate_value_p returns 1. From-SVN: r4007
This commit is contained in:
parent
1d839079a6
commit
9e7b1d0a36
47
gcc/calls.c
47
gcc/calls.c
@ -600,34 +600,33 @@ expand_call (exp, target, ignore)
|
|||||||
is_const = 0;
|
is_const = 0;
|
||||||
|
|
||||||
#ifdef PCC_STATIC_STRUCT_RETURN
|
#ifdef PCC_STATIC_STRUCT_RETURN
|
||||||
if (flag_pcc_struct_return)
|
{
|
||||||
{
|
pcc_struct_value = 1;
|
||||||
pcc_struct_value = 1;
|
is_integrable = 0; /* Easier than making that case work right. */
|
||||||
is_integrable = 0; /* Easier than making that case work right. */
|
}
|
||||||
}
|
#else /* not PCC_STATIC_STRUCT_RETURN */
|
||||||
else
|
{
|
||||||
#endif
|
struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
|
||||||
{
|
|
||||||
struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
|
|
||||||
|
|
||||||
if (struct_value_size < 0)
|
if (struct_value_size < 0)
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
if (target && GET_CODE (target) == MEM)
|
if (target && GET_CODE (target) == MEM)
|
||||||
structure_value_addr = XEXP (target, 0);
|
structure_value_addr = XEXP (target, 0);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Assign a temporary on the stack to hold the value. */
|
/* Assign a temporary on the stack to hold the value. */
|
||||||
|
|
||||||
/* For variable-sized objects, we must be called with a target
|
/* For variable-sized objects, we must be called with a target
|
||||||
specified. If we were to allocate space on the stack here,
|
specified. If we were to allocate space on the stack here,
|
||||||
we would have no way of knowing when to free it. */
|
we would have no way of knowing when to free it. */
|
||||||
|
|
||||||
structure_value_addr
|
structure_value_addr
|
||||||
= XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0);
|
= XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0);
|
||||||
target = 0;
|
target = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* not PCC_STATIC_STRUCT_RETURN */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If called function is inline, try to integrate it. */
|
/* If called function is inline, try to integrate it. */
|
||||||
|
Loading…
Reference in New Issue
Block a user