compiler: finalize methods when importing types
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 10 Jul 2019 18:12:54 +0000 (18:12 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 10 Jul 2019 18:12:54 +0000 (18:12 +0000)
commit4b8d9b23371d3ee0f7a9c1d99e80745400542930
treec5120040301f2abab3b22bbccab6ca5c6c63ddf0
parent41112d9519d48a503864a157d90fd3c6ef974bfe
compiler: finalize methods when importing types

    This patch changes the compiler to be more aggressive about finalizing
    methods on imported types, to avoid problems with interface types that
    are imported but remain unreachable until a later stage in the compilation.

    The normal pattern prior to this change was that the import process would
    leave imported interface types alone, and rely on Gogo::finalize_methods
    to locate and finalize all interface types at a later point. This way
    of doing things was not working in all cases due to the fact that we can
    import an interface type that is only reachable from the body of an
    inlinable function, meaning that we can't "find" the type during
    the methods finalize phase.

    The importer's Import::read_types() now makes a pass over all imported
    types to finalize methods on any newly imported type, which takes care
    of the issue.

    New test case for this problem in CL 185517.

    Fixes golang/go#33013

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

From-SVN: r273364
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/gogo.cc
gcc/go/gofrontend/gogo.h
gcc/go/gofrontend/import.cc
gcc/go/gofrontend/import.h