re PR go/90482 (Many 32-bit Solaris/SPARC tests FAIL with SIGBUS)
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 17 May 2019 05:49:22 +0000 (05:49 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 17 May 2019 05:49:22 +0000 (05:49 +0000)
commitfb83aeb49971769172ddc9dbb9051f68f5dbd5ea
treed305091a480ea1b2f7a8b3217343109ac3ec281f
parent935469daaa5c02ac5104c0d5c04a1f12e23529b1
re PR go/90482 (Many 32-bit Solaris/SPARC tests FAIL with SIGBUS)

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

From-SVN: r271310
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/expressions.h
gcc/go/gofrontend/gogo.cc
gcc/go/gofrontend/types.cc