https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115606
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |DUPLICATE Status|NEW |RESOLVED --- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Actually RSO setting might come from the gimplifier: /* For calls that return in memory, give *to_p as the CALL_EXPR's return slot so that we don't generate a temporary. */ if (!CALL_EXPR_RETURN_SLOT_OPT (*from_p) && aggregate_value_p (*from_p, *from_p)) { ... In the case of x86_64, Foo is not aggregate_value_p. Which does a target hook: if (targetm.calls.return_in_memory (type, fntype)) return true; reg = hard_function_value (type, 0, fntype, 0); and how it returns too. So yes this is a dup of bug 82705. *** This bug has been marked as a duplicate of bug 82705 ***