compiler: fix bug in handling of unordered set during exporting
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 18 Jul 2019 05:05:20 +0000 (05:05 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 18 Jul 2019 05:05:20 +0000 (05:05 +0000)
commitb94b6cc0251d4775ac15f43885ed63279edb9581
tree78a43dec78687c8bcbf4274e222fa17e7bef9464
parentdea78431676f0104f5467788e8e78fc05c3ab981
compiler: fix bug in handling of unordered set during exporting

    In CL 183850 a change was made to combine tracking/discovery of
    exported types and imported packages during export data generation. As
    a result of this refactoring a bug was introduced: the new code can
    potentially insert items into the exports set (an unordered_set) while
    iterating through the same set, which is illegal according to the spec
    for std::unordered_set.

    This patch fixes the problem by changing the type discovery phase to
    iterate through a separate list of sorted exports, as opposed to
    iterating through the main unordered set.  Also included is a change
    to fix the code that looks for variables that are referenced from
    inlined routine bodies (this code wasn't scanning all of the function
    that it needed to scan).

    New test case for this problem in CL 186697.

    Updates golang/go#33020.

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

From-SVN: r273564
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/export.cc
gcc/go/gofrontend/export.h
gcc/go/gofrontend/gogo.cc