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

--- Comment #1 from ian at gcc dot gnu.org <ian at gcc dot gnu.org> ---
Author: ian
Date: Fri May 17 05:49:22 2019
New Revision: 271310

URL: https://gcc.gnu.org/viewcvs?rev=271310&root=gcc&view=rev
Log:
        PR go/90482
    compiler: make value method of direct interface type takes pointer

    Currently, a value method of a direct interface type takes the
    value of the receiver, which is pointer shaped, as the first
    parameter. When this method is called through interface, we
    actually pass the interface data as a pointer. On most platforms
    this is ok, as the underlying calling convention is the same,
    except that on SPARC32, the calling convention is actually
    different.

    This CL changes the method function actually takes a pointer.
    The function will convert the pointer to the pointer-shaped
    receiver type (a no-op conversion from machine code's aspect).
    For a direct call, in the caller we convert the receiver to a
    pointer (also no-op conversion) before invoking the method. For
    an interface call, we pass the pointer as before. This way, it is
    consistent that we always pass a pointer.

    Hopefully this fixes SPARC32 build and https://gcc.gnu.org/PR90482.

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/177758

Modified:
    trunk/gcc/go/gofrontend/MERGE
    trunk/gcc/go/gofrontend/expressions.cc
    trunk/gcc/go/gofrontend/expressions.h
    trunk/gcc/go/gofrontend/gogo.cc
    trunk/gcc/go/gofrontend/types.cc

Reply via email to