]> Cypherpunks.ru repositories - gostls13.git/commitdiff
[dev.unified] cmd/compile: move "has init" to private metadata
authorMatthew Dempsky <mdempsky@google.com>
Wed, 27 Jul 2022 07:33:56 +0000 (00:33 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 28 Jul 2022 07:31:53 +0000 (07:31 +0000)
Currently, there's a "has init" bool in the public metadata section,
which is only needed by cmd/compile; but because it's in the public
metadata section, it's known to the go/types importers too. This CL
moves it instead to the new compiler-only private metadata section
added in the last CL for the inline bodies index.

The existing bool in the public metadata section is left in place, and
just always set to false, to avoid breaking the x/tools importer. The
next time we bump the export version number, we can remove the bool
properly. But no urgency just yet.

Change-Id: I380f358652374b5a221f85020a53dc65912ddb29
Reviewed-on: https://go-review.googlesource.com/c/go/+/419676
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: David Chase <drchase@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/compile/internal/importer/ureader.go
src/cmd/compile/internal/noder/unified.go
src/go/internal/gcimporter/ureader.go
src/internal/pkgbits/encoder.go

index ccd4c7c502dc232694a26b347b411307439a4384..d00b765859c849801d1408d57a5d6425d22b64a4 100644 (file)
@@ -39,7 +39,7 @@ func ReadPackage(ctxt *types2.Context, imports map[string]*types2.Package, input
 
        r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
        pkg := r.pkg()
-       r.Bool() // has init
+       r.Bool() // TODO(mdempsky): Remove; was "has init"
 
        for i, n := 0, r.Len(); i < n; i++ {
                // As if r.obj(), but avoiding the Scope.Lookup call,
index d9b15ab3852a5a42f8f6e89df2991ef3a0b7da2e..eebbb0374285cd209b78a352de2a6b7f4341ecb8 100644 (file)
@@ -161,7 +161,7 @@ func writePkgStub(noders []*noder) string {
        {
                w := publicRootWriter
                w.pkg(pkg)
-               w.Bool(false) // has init; XXX
+               w.Bool(false) // TODO(mdempsky): Remove; was "has init"
 
                scope := pkg.Scope()
                names := scope.Names()
@@ -237,12 +237,7 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) {
                pkg := r.pkg()
                base.Assertf(pkg == importpkg, "have package %q (%p), want package %q (%p)", pkg.Path, pkg, importpkg.Path, importpkg)
 
-               if r.Bool() {
-                       sym := pkg.Lookup(".inittask")
-                       task := ir.NewNameAt(src.NoXPos, sym)
-                       task.Class = ir.PEXTERN
-                       sym.Def = task
-               }
+               r.Bool() // TODO(mdempsky): Remove; was "has init"
 
                for i, n := 0, r.Len(); i < n; i++ {
                        r.Sync(pkgbits.SyncObject)
@@ -262,6 +257,13 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) {
        if !localStub {
                r := pr.newReader(pkgbits.RelocMeta, pkgbits.PrivateRootIdx, pkgbits.SyncPrivate)
 
+               if r.Bool() {
+                       sym := importpkg.Lookup(".inittask")
+                       task := ir.NewNameAt(src.NoXPos, sym)
+                       task.Class = ir.PEXTERN
+                       sym.Def = task
+               }
+
                for i, n := 0, r.Len(); i < n; i++ {
                        path := r.String()
                        name := r.String()
@@ -302,7 +304,7 @@ func writeUnifiedExport(out io.Writer) {
                r.Sync(pkgbits.SyncPkg)
                selfPkgIdx = l.relocIdx(pr, pkgbits.RelocPkg, r.Reloc(pkgbits.RelocPkg))
 
-               r.Bool() // has init
+               r.Bool() // TODO(mdempsky): Remove; was "has init"
 
                for i, n := 0, r.Len(); i < n; i++ {
                        r.Sync(pkgbits.SyncObject)
@@ -333,8 +335,7 @@ func writeUnifiedExport(out io.Writer) {
 
                w.Sync(pkgbits.SyncPkg)
                w.Reloc(pkgbits.RelocPkg, selfPkgIdx)
-
-               w.Bool(typecheck.Lookup(".inittask").Def != nil)
+               w.Bool(false) // TODO(mdempsky): Remove; was "has init"
 
                w.Len(len(idxs))
                for _, idx := range idxs {
@@ -361,6 +362,8 @@ func writeUnifiedExport(out io.Writer) {
 
                w := privateRootWriter
 
+               w.Bool(typecheck.Lookup(".inittask").Def != nil)
+
                w.Len(len(bodies))
                for _, body := range bodies {
                        w.String(body.sym.Pkg.Path)
index 63718a59e18400fd1afdbae03bfe695b137ca4cd..2047ad8ae9057648d7f5cefe32bf7c503cd255a6 100644 (file)
@@ -60,7 +60,7 @@ func readUnifiedPackage(fset *token.FileSet, ctxt *types.Context, imports map[st
 
        r := pr.newReader(pkgbits.RelocMeta, pkgbits.PublicRootIdx, pkgbits.SyncPublic)
        pkg := r.pkg()
-       r.Bool() // has init
+       r.Bool() // TODO(mdempsky): Remove; was "has init"
 
        for i, n := 0, r.Len(); i < n; i++ {
                // As if r.obj(), but avoiding the Scope.Lookup call,
index c0f22529098ab40f17f6a98089080380b33f6e35..f1bc8367ef06fc483c9f81fa1f9a2487e645cd5c 100644 (file)
@@ -19,6 +19,10 @@ import (
 //   - v0: initial prototype
 //
 //   - v1: adds the flags uint32 word
+//
+// TODO(mdempsky): For the next version bump:
+//   - remove the unused dict.derived.needed bool
+//   - remove the legacy "has init" bool from the public root
 const currentVersion uint32 = 1
 
 // A PkgEncoder provides methods for encoding a package's Unified IR