Potential fix for rdar://4658012

Ian Lance Taylor iant@google.com
Sat Aug 26 18:21:00 GMT 2006


"Richard Guenther" <richard.guenther@gmail.com> writes:

> Instead the following patch makes the C testcase above share the stack
> slot.  (completely untested)
> 
> Richard.
> 
> Index: calls.c
> ===================================================================
> *** calls.c     (revision 116273)
> --- calls.c     (working copy)
> *************** expand_call (tree exp, rtx target, int i
> *** 1985,1991 ****
>             /* For variable-sized objects, we must be called with a target
>                specified.  If we were to allocate space on the stack here,
>                we would have no way of knowing when to free it.  */
> !           rtx d = assign_temp (TREE_TYPE (exp), 1, 1, 1);
> 
>             mark_temp_addr_taken (d);
>             structure_value_addr = XEXP (d, 0);
> --- 1985,1991 ----
>             /* For variable-sized objects, we must be called with a target
>                specified.  If we were to allocate space on the stack here,
>                we would have no way of knowing when to free it.  */
> !           rtx d = assign_temp (TREE_TYPE (exp), 0, 1, 1);
> 
>             mark_temp_addr_taken (d);
>             structure_value_addr = XEXP (d, 0);

I expect that would fail for something like

typedef struct { char x[1000]; } S;
S bar (void);
void quux (S, S);
void foo (void)
{
  quux (bar(), bar());
}

Ian



More information about the Gcc-patches mailing list