http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39246
meadori at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |meadori at gcc dot gnu.org --- Comment #10 from meadori at gcc dot gnu.org --- I just bumped into this again while looking through some XFAILS. I think Andreas' analysis is correct, but I am not sure how to fix the problem. Note that for ARM that the test passes for '-mfloat-abi=hard'. For `arm-none-eabi-gcc -O -Wuninitialized` we get: original ======== { C f; C f; IMAGPART_EXPR <f> = 0.0; return f; } gimple ====== foo () { float D.4063; C f; ; NOTE: The partial store was promoted to a total store which ; introduces the 'REALPART_EXPR <f>' bit. D.4063 = REALPART_EXPR <f>; f = COMPLEX_EXPR <D.4063, 0.0>; <retval> = f; return <retval>; } cplxlower1 ========== foo () { float f$real; C f; <bb 2>: f$real_2 = f$real_6(D); f_3 = COMPLEX_EXPR <f$real_2, 0.0>; REALPART_EXPR <<retval>> = f$real_2; IMAGPART_EXPR <<retval>> = 0.0; return <retval>; } dce2 ==== foo () { float f$real; C f; <bb 2>: ; NOTE: Warning about unused variable on next statement, which is ; associated with the 'C f;' declaration because the statements ; below as introduced by cplxlower1 don't have any location info. REALPART_EXPR <<retval>> = f$real_6(D); IMAGPART_EXPR <<retval>> = 0.0; return <retval>; } For `arm-none-eabi-gcc -O -Wuninitialized -mfloat-abi=hard` things are very similar until we get to complex lowering: gimple ====== foo () { float D.4062; C D.4063; C f; ; NOTE: The partial store was promoted to a total store which ; introduces the 'REALPART_EXPR <f>' bit. D.4062 = REALPART_EXPR <f>; f = COMPLEX_EXPR <D.4062, 0.0>; D.4063 = f; return D.4063; } cplxlower1 ========== foo () { float f$real; C f; <bb 2>: f$real_2 = f$real_5(D); f_3 = COMPLEX_EXPR <f$real_2, 0.0>; return f_3; } dce2 ==== foo () { float f$real; C f; <bb 2>: ; NOTE: Warning about unused variable on next statement, ; which is associated with the '__imag__ f = 0;' line. f_3 = COMPLEX_EXPR <f$real_5(D), 0.0>; return f_3; }