diff options
Diffstat (limited to 'src/cmd/compile/internal/noder')
| -rw-r--r-- | src/cmd/compile/internal/noder/irgen.go | 2 | ||||
| -rw-r--r-- | src/cmd/compile/internal/noder/reader.go | 10 | ||||
| -rw-r--r-- | src/cmd/compile/internal/noder/writer.go | 14 |
3 files changed, 18 insertions, 8 deletions
diff --git a/src/cmd/compile/internal/noder/irgen.go b/src/cmd/compile/internal/noder/irgen.go index 5499ccd405..628c0f54fc 100644 --- a/src/cmd/compile/internal/noder/irgen.go +++ b/src/cmd/compile/internal/noder/irgen.go @@ -36,7 +36,7 @@ func checkFiles(noders []*noder) (posMap, *types2.Package, *types2.Info) { ctxt := types2.NewContext() importer := gcimports{ ctxt: ctxt, - packages: map[string]*types2.Package{"unsafe": types2.Unsafe}, + packages: make(map[string]*types2.Package), } conf := types2.Config{ Context: ctxt, diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index 1350c22467..83ebe24779 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -282,11 +282,13 @@ func (pr *pkgReader) pkgIdx(idx int) *types.Pkg { func (r *reader) doPkg() *types.Pkg { path := r.String() - if path == "builtin" { - return types.BuiltinPkg - } - if path == "" { + switch path { + case "": path = r.p.PkgPath() + case "builtin": + return types.BuiltinPkg + case "unsafe": + return types.UnsafePkg } name := r.String() diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 0fb162d381..39f0ad794f 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -214,13 +214,21 @@ func (pw *pkgWriter) pkgIdx(pkg *types2.Package) int { w := pw.newWriter(pkgbits.RelocPkg, pkgbits.SyncPkgDef) pw.pkgsIdx[pkg] = w.Idx - if pkg == nil { - w.String("builtin") - } else { + // The universe and package unsafe need to be handled specially by + // importers anyway, so we serialize them using just their package + // path. This ensures that readers don't confuse them for + // user-defined packages. + switch pkg { + case nil: // universe + w.String("builtin") // same package path used by godoc + case types2.Unsafe: + w.String("unsafe") + default: var path string if pkg != w.p.curpkg { path = pkg.Path() } + base.Assertf(path != "builtin" && path != "unsafe", "unexpected path for user-defined package: %q", path) w.String(path) w.String(pkg.Name()) w.Len(pkg.Height()) |
