]> Cypherpunks repositories - gostls13.git/commitdiff
go/types, types2: use GOEXPERIMENT to enable alias type parameters
authorRobert Griesemer <gri@golang.org>
Mon, 20 May 2024 22:53:48 +0000 (15:53 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 21 May 2024 16:24:41 +0000 (16:24 +0000)
For #46477.

Change-Id: Ia3558f9d2bf43fdd9e3618bd9f800d268e13b367
Reviewed-on: https://go-review.googlesource.com/c/go/+/586956
Reviewed-by: Carlos Amedee <carlos@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Robert Griesemer <gri@google.com>

src/cmd/compile/internal/types2/decl.go
src/go/types/decl.go
src/internal/types/testdata/spec/typeAliases1.23b.go

index 246568e25ef3b93ed97d99c31085305d55e59f9b..08c186ed0aba6931fce2075cb74f03d2ec381de9 100644 (file)
@@ -8,6 +8,7 @@ import (
        "cmd/compile/internal/syntax"
        "fmt"
        "go/constant"
+       "internal/buildcfg"
        . "internal/types/errors"
 )
 
@@ -522,6 +523,10 @@ func (check *Checker) typeDecl(obj *TypeName, tdecl *syntax.TypeDecl, def *TypeN
 
                        // handle type parameters even if not allowed (Alias type is supported)
                        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")
                                defer check.closeScope()
                                check.collectTypeParams(&alias.tparams, tdecl.TParamList)
index 1275e4f8d22a565934182ba89e427391c649d868..17dd1d41549824909438cfe8484c17626ea43f49 100644 (file)
@@ -9,6 +9,7 @@ import (
        "go/ast"
        "go/constant"
        "go/token"
+       "internal/buildcfg"
        . "internal/types/errors"
 )
 
@@ -597,6 +598,10 @@ func (check *Checker) typeDecl(obj *TypeName, tdecl *ast.TypeSpec, def *TypeName
 
                        // handle type parameters even if not allowed (Alias type is supported)
                        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")
                                defer check.closeScope()
                                check.collectTypeParams(&alias.tparams, tdecl.TypeParams)
index 9dae0ea778ac7600a278d0abbbbc46933d679867..d93e0214f851f1216031cc4df739c6c2f12cbb2a 100644 (file)
@@ -1,4 +1,4 @@
-// -lang=go1.23 -gotypesalias=1
+// -lang=go1.23 -gotypesalias=1 -goexperiment=aliastypeparams
 
 // Copyright 2024 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style