diff options
| author | Robert Griesemer <gri@google.com> | 2026-03-12 15:04:45 -0700 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2026-03-16 10:48:42 -0700 |
| commit | 655aa335c951c3b1a61560016ad2cd2f6eac1684 (patch) | |
| tree | c5ffd050eea96519b3bca37d6698cdcdd6909615 /src/cmd/compile/internal/noder | |
| parent | 48bbe7996d1e53c39188fba941bc3f9e523c8b94 (diff) | |
| download | go-655aa335c951c3b1a61560016ad2cd2f6eac1684.tar.xz | |
cmd/compile/internal/noder: factor out common UIR version
Ensure that the writers and readers use the same UIR version
by defining the currently used version in one place rather
than setting it in two places which might diverge.
Change-Id: Iae139e08c3c01e553250ba6f4f171132b06eb8c9
Reviewed-on: https://go-review.googlesource.com/c/go/+/754662
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Reviewed-by: Mark Freeman <markfreeman@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder')
| -rw-r--r-- | src/cmd/compile/internal/noder/unified.go | 14 | ||||
| -rw-r--r-- | src/cmd/compile/internal/noder/writer.go | 4 |
2 files changed, 12 insertions, 6 deletions
diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go index 05f4483d0d..6cb52fb31b 100644 --- a/src/cmd/compile/internal/noder/unified.go +++ b/src/cmd/compile/internal/noder/unified.go @@ -24,6 +24,10 @@ import ( "cmd/internal/src" ) +// uirVersion is the unified IR version to use for encoding/decoding. +// Use V2 as the encoded version for aliastypeparams. +const uirVersion = pkgbits.V2 + // localPkgReader holds the package reader used for reading the local // package. It exists so the unified IR linker can refer back to it // later. @@ -463,10 +467,8 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) { // writeUnifiedExport writes to `out` the finalized, self-contained // Unified IR export data file for the current compilation unit. func writeUnifiedExport(out io.Writer) { - // Use V2 as the encoded version for aliastypeparams. - version := pkgbits.V2 l := linker{ - pw: pkgbits.NewPkgEncoder(version, base.Debug.SyncFrames), + pw: pkgbits.NewPkgEncoder(uirVersion, base.Debug.SyncFrames), pkgs: make(map[string]index), decls: make(map[*types.Sym]index), @@ -487,6 +489,12 @@ func writeUnifiedExport(out io.Writer) { r.Sync(pkgbits.SyncPkg) selfPkgIdx = l.relocIdx(pr, pkgbits.SectionPkg, r.Reloc(pkgbits.SectionPkg)) + // Versions must match. + // TODO: It seems that we should be able to use r.Version() for NewPkgEncoder + // instead of passing uirVersion, but NewPkgEncoder is created before r. + // If that is correct, we should make that happen. + assert(r.Version() == uirVersion) + if r.Version().Has(pkgbits.HasInit) { r.Bool() } diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index e772328b0a..8139d889df 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -96,10 +96,8 @@ type pkgWriter struct { // newPkgWriter returns an initialized pkgWriter for the specified // package. func newPkgWriter(m posMap, pkg *types2.Package, info *types2.Info, otherInfo map[*syntax.FuncLit]bool) *pkgWriter { - // Use V2 as the encoded version for aliastypeparams. - version := pkgbits.V2 return &pkgWriter{ - PkgEncoder: pkgbits.NewPkgEncoder(version, base.Debug.SyncFrames), + PkgEncoder: pkgbits.NewPkgEncoder(uirVersion, base.Debug.SyncFrames), m: m, curpkg: pkg, |
