compiler: fix spurious redefinition error for anon struct
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 22 Dec 2016 23:05:02 +0000 (23:05 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 22 Dec 2016 23:05:02 +0000 (23:05 +0000)
commit28171b9d5dff2ee4fa0675ff36f5c55131ae158f
treed89a2a32fc4fe6b2ca04d0ad5487f72a348c05bb
parentcb66382056ed3d00383bed84db0df5b074f8265a
compiler: fix spurious redefinition error for anon struct

    Change Struct_type::do_mangled_name to incorporate the field
    names even for hidden symbols. This is needed in cases where
    a package imports a type "S" that has an anonymous struct, e.g.

      // imported from some other package
      type S struct {
        X struct{ _ struct{} }
      }

    and then defines a local type that uses a structurally identical
    anonymous struct, e.g.

      // defined locally
      type T struct {
        U struct{ _ struct{} }
      }

    In the case above both types triggered the creation of hash/equal
    methods, but the method names were clashing (since both structs
    had the same mangled name).

    Fixes golang/go#18414

    Reviewed-on: https://go-review.googlesource.com/34621

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