From 9e8ea567c838574a0f14538c0bbbd83c3215aa55 Mon Sep 17 00:00:00 2001 From: Tim King Date: Mon, 26 Aug 2024 15:49:09 -0700 Subject: cmd/compile/internal/noder: write V2 bitstream aliastypeparams=1 Enables V2 unified IR bitstreams when GOEXPERIMENT aliastypeparams are enabled. Allows pkgbits.NewPkgEncoder to set the output version. Reenables support for writing V0 streams. Updates #68778 Updates #68526 Change-Id: I590c494d81ab7db148232ceaba52229068d1e986 Reviewed-on: https://go-review.googlesource.com/c/go/+/608595 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Cuong Manh Le --- src/cmd/compile/internal/noder/unified.go | 8 +++++++- src/cmd/compile/internal/noder/writer.go | 10 +++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src/cmd') diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go index ead348f0c1..c8dbc43e67 100644 --- a/src/cmd/compile/internal/noder/unified.go +++ b/src/cmd/compile/internal/noder/unified.go @@ -6,6 +6,7 @@ package noder import ( "fmt" + "internal/buildcfg" "internal/pkgbits" "internal/types/errors" "io" @@ -462,8 +463,13 @@ 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 aliastypeparams GOEXPERIMENT is enabled. + version := pkgbits.V1 + if buildcfg.Experiment.AliasTypeParams { + version = pkgbits.V2 + } l := linker{ - pw: pkgbits.NewPkgEncoder(base.Debug.SyncFrames), + pw: pkgbits.NewPkgEncoder(version, base.Debug.SyncFrames), pkgs: make(map[string]index), decls: make(map[*types.Sym]index), diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 695fdcceea..564087d912 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -96,8 +96,13 @@ 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 aliastypeparams GOEXPERIMENT is enabled. + version := pkgbits.V1 + if buildcfg.Experiment.AliasTypeParams { + version = pkgbits.V2 + } return &pkgWriter{ - PkgEncoder: pkgbits.NewPkgEncoder(base.Debug.SyncFrames), + PkgEncoder: pkgbits.NewPkgEncoder(version, base.Debug.SyncFrames), m: m, curpkg: pkg, @@ -864,8 +869,7 @@ func (w *writer) doObj(wext *writer, obj types2.Object) pkgbits.CodeObj { if w.Version().Has(pkgbits.AliasTypeParamNames) { w.typeParamNames(tparams) } - // TODO(taking): enable this assertion once this is not intended to be a nop. - // assert(w.Version().Has(pkgbits.AliasTypeParamNames) || tparams.Len() == 0) + assert(w.Version().Has(pkgbits.AliasTypeParamNames) || tparams.Len() == 0) w.typ(rhs) return pkgbits.ObjAlias } -- cgit v1.3-5-g9baa