mirror of
https://github.com/golang/go.git
synced 2025-10-19 19:13:18 +00:00
all: delete aliastypeparams GOEXPERIMENT
Always enable aliastypeparams and remove the GOEXPERIMENT. Change-Id: Ic38fe25b0bba312a7f83f7bb94b57ab75ce0f0c3 Reviewed-on: https://go-review.googlesource.com/c/go/+/691956 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Mark Freeman <markfreeman@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
parent
74421a305b
commit
00a7bdcb55
22 changed files with 19 additions and 76 deletions
|
@ -7,7 +7,6 @@ package noder
|
||||||
import (
|
import (
|
||||||
"cmp"
|
"cmp"
|
||||||
"fmt"
|
"fmt"
|
||||||
"internal/buildcfg"
|
|
||||||
"internal/pkgbits"
|
"internal/pkgbits"
|
||||||
"internal/types/errors"
|
"internal/types/errors"
|
||||||
"io"
|
"io"
|
||||||
|
@ -464,11 +463,8 @@ func readPackage(pr *pkgReader, importpkg *types.Pkg, localStub bool) {
|
||||||
// writeUnifiedExport writes to `out` the finalized, self-contained
|
// writeUnifiedExport writes to `out` the finalized, self-contained
|
||||||
// Unified IR export data file for the current compilation unit.
|
// Unified IR export data file for the current compilation unit.
|
||||||
func writeUnifiedExport(out io.Writer) {
|
func writeUnifiedExport(out io.Writer) {
|
||||||
// Use V2 as the encoded version aliastypeparams GOEXPERIMENT is enabled.
|
// Use V2 as the encoded version for aliastypeparams.
|
||||||
version := pkgbits.V1
|
version := pkgbits.V2
|
||||||
if buildcfg.Experiment.AliasTypeParams {
|
|
||||||
version = pkgbits.V2
|
|
||||||
}
|
|
||||||
l := linker{
|
l := linker{
|
||||||
pw: pkgbits.NewPkgEncoder(version, base.Debug.SyncFrames),
|
pw: pkgbits.NewPkgEncoder(version, base.Debug.SyncFrames),
|
||||||
|
|
||||||
|
|
|
@ -96,11 +96,8 @@ type pkgWriter struct {
|
||||||
// newPkgWriter returns an initialized pkgWriter for the specified
|
// newPkgWriter returns an initialized pkgWriter for the specified
|
||||||
// package.
|
// package.
|
||||||
func newPkgWriter(m posMap, pkg *types2.Package, info *types2.Info, otherInfo map[*syntax.FuncLit]bool) *pkgWriter {
|
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.
|
// Use V2 as the encoded version for aliastypeparams.
|
||||||
version := pkgbits.V1
|
version := pkgbits.V2
|
||||||
if buildcfg.Experiment.AliasTypeParams {
|
|
||||||
version = pkgbits.V2
|
|
||||||
}
|
|
||||||
return &pkgWriter{
|
return &pkgWriter{
|
||||||
PkgEncoder: pkgbits.NewPkgEncoder(version, base.Debug.SyncFrames),
|
PkgEncoder: pkgbits.NewPkgEncoder(version, base.Debug.SyncFrames),
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"cmd/compile/internal/syntax"
|
"cmd/compile/internal/syntax"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/constant"
|
"go/constant"
|
||||||
"internal/buildcfg"
|
|
||||||
. "internal/types/errors"
|
. "internal/types/errors"
|
||||||
"slices"
|
"slices"
|
||||||
)
|
)
|
||||||
|
@ -525,10 +524,6 @@ func (check *Checker) typeDecl(obj *TypeName, tdecl *syntax.TypeDecl, def *TypeN
|
||||||
|
|
||||||
// handle type parameters even if not allowed (Alias type is supported)
|
// handle type parameters even if not allowed (Alias type is supported)
|
||||||
if tparam0 != nil {
|
if tparam0 != nil {
|
||||||
if !versionErr && !buildcfg.Experiment.AliasTypeParams {
|
|
||||||
check.error(tdecl, UnsupportedFeature, "generic type alias requires GOEXPERIMENT=aliastypeparams")
|
|
||||||
versionErr = true
|
|
||||||
}
|
|
||||||
check.openScope(tdecl, "type parameters")
|
check.openScope(tdecl, "type parameters")
|
||||||
defer check.closeScope()
|
defer check.closeScope()
|
||||||
check.collectTypeParams(&alias.tparams, tdecl.TParamList)
|
check.collectTypeParams(&alias.tparams, tdecl.TParamList)
|
||||||
|
|
|
@ -11,7 +11,6 @@ import (
|
||||||
"cmd/compile/internal/syntax"
|
"cmd/compile/internal/syntax"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"internal/buildcfg"
|
|
||||||
. "internal/types/errors"
|
. "internal/types/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -130,10 +129,6 @@ func (check *Checker) instance(pos syntax.Pos, orig genericType, targs []Type, e
|
||||||
res = check.newNamedInstance(pos, orig, targs, expanding) // substituted lazily
|
res = check.newNamedInstance(pos, orig, targs, expanding) // substituted lazily
|
||||||
|
|
||||||
case *Alias:
|
case *Alias:
|
||||||
if !buildcfg.Experiment.AliasTypeParams {
|
|
||||||
assert(expanding == nil) // Alias instances cannot be reached from Named types
|
|
||||||
}
|
|
||||||
|
|
||||||
// verify type parameter count (see go.dev/issue/71198 for a test case)
|
// verify type parameter count (see go.dev/issue/71198 for a test case)
|
||||||
tparams := orig.TypeParams()
|
tparams := orig.TypeParams()
|
||||||
if !check.validateTArgLen(pos, orig.obj.Name(), tparams.Len(), len(targs)) {
|
if !check.validateTArgLen(pos, orig.obj.Name(), tparams.Len(), len(targs)) {
|
||||||
|
|
|
@ -99,8 +99,7 @@ var testObjects = []struct {
|
||||||
{"type t = struct{f int}", "t", "type p.t = struct{f int}", false},
|
{"type t = struct{f int}", "t", "type p.t = struct{f int}", false},
|
||||||
{"type t = func(int)", "t", "type p.t = func(int)", false},
|
{"type t = func(int)", "t", "type p.t = func(int)", false},
|
||||||
{"type A = B; type B = int", "A", "type p.A = p.B", true},
|
{"type A = B; type B = int", "A", "type p.A = p.B", true},
|
||||||
{"type A[P ~int] = struct{}", "A", "type p.A[P ~int] = struct{}", true}, // requires GOEXPERIMENT=aliastypeparams
|
{"type A[P ~int] = struct{}", "A", "type p.A[P ~int] = struct{}", true},
|
||||||
|
|
||||||
{"var v int", "v", "var p.v int", false},
|
{"var v int", "v", "var p.v int", false},
|
||||||
|
|
||||||
{"func f(int) string", "f", "func p.f(int) string", false},
|
{"func f(int) string", "f", "func p.f(int) string", false},
|
||||||
|
@ -114,10 +113,6 @@ func TestObjectString(t *testing.T) {
|
||||||
|
|
||||||
for i, test := range testObjects {
|
for i, test := range testObjects {
|
||||||
t.Run(fmt.Sprint(i), func(t *testing.T) {
|
t.Run(fmt.Sprint(i), func(t *testing.T) {
|
||||||
if test.alias {
|
|
||||||
revert := setGOEXPERIMENT("aliastypeparams")
|
|
||||||
defer revert()
|
|
||||||
}
|
|
||||||
src := "package p; " + test.src
|
src := "package p; " + test.src
|
||||||
conf := Config{Error: func(error) {}, Importer: defaultImporter(), EnableAlias: test.alias}
|
conf := Config{Error: func(error) {}, Importer: defaultImporter(), EnableAlias: test.alias}
|
||||||
pkg, err := typecheck(src, &conf, nil)
|
pkg, err := typecheck(src, &conf, nil)
|
||||||
|
|
|
@ -332,6 +332,8 @@ func TestStdFixed(t *testing.T) {
|
||||||
"issue49814.go", // go/types does not have constraints on array size
|
"issue49814.go", // go/types does not have constraints on array size
|
||||||
"issue56103.go", // anonymous interface cycles; will be a type checker error in 1.22
|
"issue56103.go", // anonymous interface cycles; will be a type checker error in 1.22
|
||||||
"issue52697.go", // types2 does not have constraints on stack size
|
"issue52697.go", // types2 does not have constraints on stack size
|
||||||
|
"issue68054.go", // this test requires GODEBUG=gotypesalias=1
|
||||||
|
"issue68580.go", // this test requires GODEBUG=gotypesalias=1
|
||||||
"issue73309.go", // this test requires GODEBUG=gotypesalias=1
|
"issue73309.go", // this test requires GODEBUG=gotypesalias=1
|
||||||
"issue73309b.go", // this test requires GODEBUG=gotypesalias=1
|
"issue73309b.go", // this test requires GODEBUG=gotypesalias=1
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
"go/ast"
|
"go/ast"
|
||||||
"go/constant"
|
"go/constant"
|
||||||
"go/token"
|
"go/token"
|
||||||
"internal/buildcfg"
|
|
||||||
. "internal/types/errors"
|
. "internal/types/errors"
|
||||||
"slices"
|
"slices"
|
||||||
)
|
)
|
||||||
|
@ -600,10 +599,6 @@ func (check *Checker) typeDecl(obj *TypeName, tdecl *ast.TypeSpec, def *TypeName
|
||||||
|
|
||||||
// handle type parameters even if not allowed (Alias type is supported)
|
// handle type parameters even if not allowed (Alias type is supported)
|
||||||
if tparam0 != nil {
|
if tparam0 != nil {
|
||||||
if !versionErr && !buildcfg.Experiment.AliasTypeParams {
|
|
||||||
check.error(tdecl, UnsupportedFeature, "generic type alias requires GOEXPERIMENT=aliastypeparams")
|
|
||||||
versionErr = true
|
|
||||||
}
|
|
||||||
check.openScope(tdecl, "type parameters")
|
check.openScope(tdecl, "type parameters")
|
||||||
defer check.closeScope()
|
defer check.closeScope()
|
||||||
check.collectTypeParams(&alias.tparams, tdecl.TypeParams)
|
check.collectTypeParams(&alias.tparams, tdecl.TypeParams)
|
||||||
|
|
|
@ -14,7 +14,6 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/token"
|
"go/token"
|
||||||
"internal/buildcfg"
|
|
||||||
. "internal/types/errors"
|
. "internal/types/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -133,10 +132,6 @@ func (check *Checker) instance(pos token.Pos, orig genericType, targs []Type, ex
|
||||||
res = check.newNamedInstance(pos, orig, targs, expanding) // substituted lazily
|
res = check.newNamedInstance(pos, orig, targs, expanding) // substituted lazily
|
||||||
|
|
||||||
case *Alias:
|
case *Alias:
|
||||||
if !buildcfg.Experiment.AliasTypeParams {
|
|
||||||
assert(expanding == nil) // Alias instances cannot be reached from Named types
|
|
||||||
}
|
|
||||||
|
|
||||||
// verify type parameter count (see go.dev/issue/71198 for a test case)
|
// verify type parameter count (see go.dev/issue/71198 for a test case)
|
||||||
tparams := orig.TypeParams()
|
tparams := orig.TypeParams()
|
||||||
if !check.validateTArgLen(pos, orig.obj.Name(), tparams.Len(), len(targs)) {
|
if !check.validateTArgLen(pos, orig.obj.Name(), tparams.Len(), len(targs)) {
|
||||||
|
|
|
@ -99,8 +99,7 @@ var testObjects = []struct {
|
||||||
{"type t = struct{f int}", "t", "type p.t = struct{f int}", false},
|
{"type t = struct{f int}", "t", "type p.t = struct{f int}", false},
|
||||||
{"type t = func(int)", "t", "type p.t = func(int)", false},
|
{"type t = func(int)", "t", "type p.t = func(int)", false},
|
||||||
{"type A = B; type B = int", "A", "type p.A = p.B", true},
|
{"type A = B; type B = int", "A", "type p.A = p.B", true},
|
||||||
{"type A[P ~int] = struct{}", "A", "type p.A[P ~int] = struct{}", true}, // requires GOEXPERIMENT=aliastypeparams
|
{"type A[P ~int] = struct{}", "A", "type p.A[P ~int] = struct{}", true},
|
||||||
|
|
||||||
{"var v int", "v", "var p.v int", false},
|
{"var v int", "v", "var p.v int", false},
|
||||||
|
|
||||||
{"func f(int) string", "f", "func p.f(int) string", false},
|
{"func f(int) string", "f", "func p.f(int) string", false},
|
||||||
|
@ -115,8 +114,6 @@ func TestObjectString(t *testing.T) {
|
||||||
for i, test := range testObjects {
|
for i, test := range testObjects {
|
||||||
t.Run(fmt.Sprint(i), func(t *testing.T) {
|
t.Run(fmt.Sprint(i), func(t *testing.T) {
|
||||||
if test.alias {
|
if test.alias {
|
||||||
revert := setGOEXPERIMENT("aliastypeparams")
|
|
||||||
defer revert()
|
|
||||||
t.Setenv("GODEBUG", "gotypesalias=1")
|
t.Setenv("GODEBUG", "gotypesalias=1")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -334,6 +334,8 @@ func TestStdFixed(t *testing.T) {
|
||||||
"issue49814.go", // go/types does not have constraints on array size
|
"issue49814.go", // go/types does not have constraints on array size
|
||||||
"issue56103.go", // anonymous interface cycles; will be a type checker error in 1.22
|
"issue56103.go", // anonymous interface cycles; will be a type checker error in 1.22
|
||||||
"issue52697.go", // go/types does not have constraints on stack size
|
"issue52697.go", // go/types does not have constraints on stack size
|
||||||
|
"issue68054.go", // this test requires GODEBUG=gotypesalias=1
|
||||||
|
"issue68580.go", // this test requires GODEBUG=gotypesalias=1
|
||||||
"issue73309.go", // this test requires GODEBUG=gotypesalias=1
|
"issue73309.go", // this test requires GODEBUG=gotypesalias=1
|
||||||
"issue73309b.go", // this test requires GODEBUG=gotypesalias=1
|
"issue73309b.go", // this test requires GODEBUG=gotypesalias=1
|
||||||
|
|
||||||
|
|
|
@ -79,10 +79,9 @@ func ParseGOEXPERIMENT(goos, goarch, goexp string) (*ExperimentFlags, error) {
|
||||||
dwarf5Supported := (goos != "darwin" && goos != "ios" && goos != "aix")
|
dwarf5Supported := (goos != "darwin" && goos != "ios" && goos != "aix")
|
||||||
|
|
||||||
baseline := goexperiment.Flags{
|
baseline := goexperiment.Flags{
|
||||||
RegabiWrappers: regabiSupported,
|
RegabiWrappers: regabiSupported,
|
||||||
RegabiArgs: regabiSupported,
|
RegabiArgs: regabiSupported,
|
||||||
AliasTypeParams: true,
|
Dwarf5: dwarf5Supported,
|
||||||
Dwarf5: dwarf5Supported,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start with the statically enabled set of experiments.
|
// Start with the statically enabled set of experiments.
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
// Code generated by mkconsts.go. DO NOT EDIT.
|
|
||||||
|
|
||||||
//go:build !goexperiment.aliastypeparams
|
|
||||||
|
|
||||||
package goexperiment
|
|
||||||
|
|
||||||
const AliasTypeParams = false
|
|
||||||
const AliasTypeParamsInt = 0
|
|
|
@ -1,8 +0,0 @@
|
||||||
// Code generated by mkconsts.go. DO NOT EDIT.
|
|
||||||
|
|
||||||
//go:build goexperiment.aliastypeparams
|
|
||||||
|
|
||||||
package goexperiment
|
|
||||||
|
|
||||||
const AliasTypeParams = true
|
|
||||||
const AliasTypeParamsInt = 1
|
|
|
@ -100,11 +100,6 @@ type Flags struct {
|
||||||
// inlining phase within the Go compiler.
|
// inlining phase within the Go compiler.
|
||||||
NewInliner bool
|
NewInliner bool
|
||||||
|
|
||||||
// AliasTypeParams enables type parameters for alias types.
|
|
||||||
// Requires that gotypesalias=1 is set with GODEBUG.
|
|
||||||
// This flag will be removed with Go 1.25.
|
|
||||||
AliasTypeParams bool
|
|
||||||
|
|
||||||
// Synctest enables the testing/synctest package.
|
// Synctest enables the testing/synctest package.
|
||||||
Synctest bool
|
Synctest bool
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// -goexperiment=aliastypeparams -gotypesalias=1
|
// -gotypesalias=1
|
||||||
|
|
||||||
// Copyright 2024 The Go Authors. All rights reserved.
|
// Copyright 2024 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// -goexperiment=aliastypeparams -gotypesalias=1
|
// -gotypesalias=1
|
||||||
|
|
||||||
// Copyright 2024 The Go Authors. All rights reserved.
|
// Copyright 2024 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// -lang=go1.23 -gotypesalias=1 -goexperiment=aliastypeparams
|
// -lang=go1.23 -gotypesalias=1
|
||||||
|
|
||||||
// Copyright 2024 The Go Authors. All rights reserved.
|
// Copyright 2024 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// compile -goexperiment aliastypeparams
|
// compile
|
||||||
|
|
||||||
// Copyright 2024 The Go Authors. All rights reserved.
|
// Copyright 2024 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build goexperiment.aliastypeparams
|
|
||||||
|
|
||||||
package a
|
package a
|
||||||
|
|
||||||
type A[T any] = struct{ F T }
|
type A[T any] = struct{ F T }
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build goexperiment.aliastypeparams
|
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// runindir -goexperiment aliastypeparams -gomodversion "1.23"
|
// runindir -gomodversion "1.23"
|
||||||
|
|
||||||
// Copyright 2024 The Go Authors. All rights reserved.
|
// Copyright 2024 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// compile -goexperiment aliastypeparams
|
// compile
|
||||||
|
|
||||||
// Copyright 2024 The Go Authors. All rights reserved.
|
// Copyright 2024 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue