compiler: compare parse methods when indexing interface types for export
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 13 Mar 2019 05:12:05 +0000 (05:12 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 13 Mar 2019 05:12:05 +0000 (05:12 +0000)
commit599b9f723e42b0efdf580c45bc03e12dec377edd
tree5d93e81f1fa20d234f29478a57f4d05cdd341756
parentf4390da0c537d637e6aa582f68c65bac13396196
compiler: compare parse methods when indexing interface types for export

    This change fixes a bug in which two interface types were being
    incorrectly commoned (considered identical) in the initial stages of
    writing out types to export data. The indexer does a walk to collect
    candidates for export, inserting types into a table to eliminate
    duplicates; as part of this process a local interface type T1 was
    being commoned with a different interface type T2. This caused a cycle
    in the exported type graph due to the way embedded interfaces are
    handled.

    The fix was to add a new flag to the Type::is_identical utility
    routine to request that interface type comparison be done by examining
    the original parse methods, as opposed to the expanded method set,
    then use the new flag when creating the hash map for the exporter.

    Fixes golang/go#30659.

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

From-SVN: r269634
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/export.cc
gcc/go/gofrontend/types.cc
gcc/go/gofrontend/types.h