From: Matthew Dempsky Date: Tue, 1 Dec 2015 20:05:30 +0000 (-0800) Subject: cmd/compile: make -A and -newexport compatible X-Git-Tag: go1.7beta1~1824 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d930d69fd95e410107e84231f57ff629d1ef7f21;p=gostls13.git cmd/compile: make -A and -newexport compatible Packages compiled with -A may reference the builtin "any" type, so it needs to be included in the list of predeclared types for binary import/export. Also, when -A is used, mark all symbols as SymExport instead of SymPackage in importsym. This parallels the logic in autoexport and is necessary to prevent a "export/package mismatch" errors in exportsym during dumpexport's verifyExport pass. Change-Id: Iff5ec5fbfe2219525ec9d1a975307fa8936af9b9 Reviewed-on: https://go-review.googlesource.com/19627 Reviewed-by: Robert Griesemer Run-TryBot: Matthew Dempsky TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/compile/internal/gc/bexport.go b/src/cmd/compile/internal/gc/bexport.go index 3edd0488e7..ff0465f64c 100644 --- a/src/cmd/compile/internal/gc/bexport.go +++ b/src/cmd/compile/internal/gc/bexport.go @@ -1035,6 +1035,9 @@ func predeclared() []*Type { // package unsafe Types[TUNSAFEPTR], + + // any type, for builtin export data + Types[TANY], } } return predecl diff --git a/src/cmd/compile/internal/gc/export.go b/src/cmd/compile/internal/gc/export.go index e50cf383d7..1b61d7f228 100644 --- a/src/cmd/compile/internal/gc/export.go +++ b/src/cmd/compile/internal/gc/export.go @@ -442,7 +442,7 @@ func importsym(s *Sym, op Op) *Sym { // mark the symbol so it is not reexported if s.Def == nil { - if exportname(s.Name) || initname(s.Name) { + if Debug['A'] != 0 || exportname(s.Name) || initname(s.Name) { s.Flags |= SymExport } else { s.Flags |= SymPackage // package scope diff --git a/src/go/internal/gcimporter/bimport.go b/src/go/internal/gcimporter/bimport.go index 68690424a1..ad1c4cd02a 100644 --- a/src/go/internal/gcimporter/bimport.go +++ b/src/go/internal/gcimporter/bimport.go @@ -678,4 +678,8 @@ var predeclared = []types.Type{ // package unsafe types.Typ[types.UnsafePointer], + + // any type, for builtin export data + // TODO(mdempsky): Provide an actual Type value to represent "any"? + types.Typ[types.Invalid], }