https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92002
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org --- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I guess the problem is in a function that returns wide_int by value and has return wi::shwi (something, prec); In *.gimple dump I see D.63355 = wi::shwi (-1, precision); try { generic_wide_int<wide_int_storage>::generic_wide_int<wi::hwi_with_prec> (&D.63356, &D.63355); try { D.69890 = D.63356; return D.69890; } where struct hwi_with_prec D.63355; struct wide_int D.63356; struct wide_int D.69890; where D.69890 is the RESULT_DECL. Makes me wonder why the wide_int isn't constructed directly into the RESULT_DECL, but it is constructed into a temporary and that one is then bitwise copied. I thought generic_wide_int copy constructor shall invoke wide_int_storage copy constructor that should invoke wi::copy.