From d68d485405d8e604921e6d63ed32ae344fd3049e Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 20 May 2024 15:53:48 -0700 Subject: [PATCH] go/types, types2: use GOEXPERIMENT to enable alias type parameters For #46477. Change-Id: Ia3558f9d2bf43fdd9e3618bd9f800d268e13b367 Reviewed-on: https://go-review.googlesource.com/c/go/+/586956 Reviewed-by: Carlos Amedee Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer LUCI-TryBot-Result: Go LUCI Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/decl.go | 5 +++++ src/go/types/decl.go | 5 +++++ src/internal/types/testdata/spec/typeAliases1.23b.go | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/types2/decl.go b/src/cmd/compile/internal/types2/decl.go index 246568e25e..08c186ed0a 100644 --- a/src/cmd/compile/internal/types2/decl.go +++ b/src/cmd/compile/internal/types2/decl.go @@ -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) diff --git a/src/go/types/decl.go b/src/go/types/decl.go index 1275e4f8d2..17dd1d4154 100644 --- a/src/go/types/decl.go +++ b/src/go/types/decl.go @@ -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) diff --git a/src/internal/types/testdata/spec/typeAliases1.23b.go b/src/internal/types/testdata/spec/typeAliases1.23b.go index 9dae0ea778..d93e0214f8 100644 --- a/src/internal/types/testdata/spec/typeAliases1.23b.go +++ b/src/internal/types/testdata/spec/typeAliases1.23b.go @@ -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 -- 2.50.0