------- Additional Comments From fche at redhat dot com  2005-01-10 17:04 
-------
This patch appears to fix the problem: testing and getting approvals

--- gimplify.c  1 Jan 2005 01:43:08 -0000       2.101
+++ gimplify.c  10 Jan 2005 17:03:54 -0000
@@ -2949,6 +2949,15 @@ gimplify_modify_expr (tree *expr_p, tree
   if (ret != GS_UNHANDLED)
     return ret;
  
+  /* Handle aggregate returns from function calls.  We need to mark
+     the LHS addressable, since the expanded call will pass its
+     address as a hidden argument.  */
+  if (TREE_CODE (*from_p) == CALL_EXPR)
+    {
+      if (aggregate_value_p (*to_p, *from_p))
+        lang_hooks.mark_addressable (*to_p);
+    }
+
   /* If we've got a variable sized assignment between two lvalues (i.e. does
      not involve a call), then we can make things a bit more straightforward
      by converting the assignment to memcpy or memset.  */

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19319

Reply via email to