This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Potential fix for rdar://4658012


On 8/26/06, Richard Guenther <richard.guenther@gmail.com> wrote:
On 26 Aug 2006 11:12:03 -0700, Ian Lance Taylor <iant@google.com> wrote:
> "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());
> }

Not really.  It passed testing for C and C++ at least.  For the above we get
the still bad (-Os to not inline the memcpys)

Instead it fails for the testcase below. Committed as obvious.


Richard.

Index: testsuite/ChangeLog
===================================================================
*** testsuite/ChangeLog (revision 116476)
--- testsuite/ChangeLog (working copy)
***************
*** 1,3 ****
--- 1,7 ----
+ 2006-08-26  Richard Guenther  <rguenther@suse.de>
+
+       * gcc.c-torture/compile/20060826-1.c: New testcase.
+
 2006-08-26  Lee Millward  <lee.millward@codesourcery.com>

         PR c++/28736
Index: testsuite/gcc.c-torture/compile/20060826-1.c
===================================================================
*** testsuite/gcc.c-torture/compile/20060826-1.c        (revision 0)
--- testsuite/gcc.c-torture/compile/20060826-1.c        (revision 0)
***************
*** 0 ****
--- 1,7 ----
+ typedef _Complex double S;
+ S bar (void);
+ void quux (S, S);
+ void foo (void)
+ {
+  quux (bar(), bar());
+ }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]