https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97456
--- Comment #4 from Martin Jambor <jamborm at gcc dot gnu.org> --- Looking at Martin's reduced testcase.... (In reply to Richard Biener from comment #2) > Confirmed with -fwhole-program -O3 IPA SRA messes things up here cloning > wrong > and producing the strange > > wrong.isra (floatD.41 ISRA.85D.75004) > { [...] > > <bb 6> [local count: 1073741824]: > > <bb 2> [local count: 1073741824]: > _1 = ISRA.85_10(D); > > eventually mixing up param/replacement here? ...this is simple conversion of a parameter passed by reference to one passed by value. I'm good at overlooking things but at least at the moment I cannot see anything wrong with it. Rather, I believe it is cplxlower1 which turns <bb 2> [local count: 1073741824]: a$_M_value_21 = COMPLEX_EXPR <ISRA.18_10(D), ISRA.18_10(D)>; into: <bb 2> [local count: 1073741824]: a$_M_value_21 = COMPLEX_EXPR <a$_M_value$real_10(D), a$_M_value$real_10(D)>; i.e. it replaces two uses of the parameter default-def with two uninitialized value variable default-defs. When I disable IPA-SRA, the pass starts with: <bb 2> [local count: 1073741824]: _1 = *pos_6(D); a$_M_value_21 = COMPLEX_EXPR <_1, _1>; and changes it into: <bb 2> [local count: 1073741824]: a$_M_value$real_1 = *pos_6(D); a$_M_value_21 = COMPLEX_EXPR <a$_M_value$real_1, a$_M_value$real_1>; ...so my hypothesis is that cplxlower does not handle good default-defs properly.