https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120409

--- Comment #10 from Iain Sandoe <iains at gcc dot gnu.org> ---
(In reply to H.J. Lu from comment #9)
> The .006t.original dump differences between -m32 and -mx32
> 


> Where does this difference come from?


this function:

OptionalPromiseReturn
OptionalPromise::get_return_object() {
    return *this;
}

===

produces the following gimple on most targets (which seems correct):

struct OptionalPromiseReturn folly::OptionalPromise::get_return_object (struct
OptionalPromise * const this)
{
  folly::OptionalPromiseReturn::OptionalPromiseReturn (&<retval>, this);
  return <retval>;
}

======

but it produces the following gimple on sparcv9-solaris and mx32-linux:
(which seems to be incorrect - since there is a copy that I think should be
elided)

This is regular C++ - it is not modified by the coroutine transforms.

=======

struct OptionalPromiseReturn folly::OptionalPromise::get_return_object (struct
OptionalPromise * const this)
{
  struct OptionalPromiseReturn D.9045;
  struct OptionalPromiseReturn D.8785;

  try
    {
      folly::OptionalPromiseReturn::OptionalPromiseReturn (&D.8785, this);
      D.9045 = D.8785;
      return D.9045;
    }
  finally
    {
      D.8785 = {CLOBBER(eos)};
    }
}

Reply via email to