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.

Reply via email to