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