------- 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