------- Comment #3 from jakub at gcc dot gnu dot org 2010-07-27 12:58 ------- Seems to be caused by partial inlining. fnsplit splits off the: q.0D.2030_3 = qD.1248; fn7 (q.0D.2030_3); part of fn9 into fn9.part.0: fn9.part.0 () { intD.0 D.2054; voidD.32 * q.0D.2053; struct T tD.2052; struct T xD.2050; intD.0 yD.2051;
<bb 4>: <bb 2>: q.0D.2053_1 = qD.1248; fn7 (q.0D.2053_1); <bb 3>: <retval> = tD.2052; return <retval>; } and uses: tD.1261 = fn9.part.0 (); [return slot optimization] in fn9 instead. tD.2052 isn't initialized anywhere though (and, it is unclear why it did that at all, as that hunk doesn't modify t). Perhaps with -m32 and aggregate return (where in the end t will be returned via hidden reference) t is addressable? In any case, this is fnsplit bug. -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hubicka at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45085