From: Robert Griesemer Date: Sun, 14 Nov 2021 00:16:53 +0000 (-0800) Subject: cmd/compile/internal/types2: add test for imported constraints pre-1.18 X-Git-Tag: go1.18beta1~310 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d15610128e63e299e39af02ea0e6be1afd38b1ff;p=gostls13.git cmd/compile/internal/types2: add test for imported constraints pre-1.18 But exclude the test when running unified build for now (the unified builder's importers are not yet updated to handle extended interfaces). Also, fix respective error position. Fixes #47967. Change-Id: I4e3d829b5c12001c024b9eefcc27f97b10c1d1e5 Reviewed-on: https://go-review.googlesource.com/c/go/+/363834 Trust: Robert Griesemer Run-TryBot: Robert Griesemer Reviewed-by: Robert Findley TryBot-Result: Go Bot --- diff --git a/src/cmd/compile/internal/types2/check_test.go b/src/cmd/compile/internal/types2/check_test.go index ddaacd2443..a5ecdf8b81 100644 --- a/src/cmd/compile/internal/types2/check_test.go +++ b/src/cmd/compile/internal/types2/check_test.go @@ -25,6 +25,7 @@ package types2_test import ( "cmd/compile/internal/syntax" "flag" + "internal/buildcfg" "internal/testenv" "os" "path/filepath" @@ -93,11 +94,27 @@ func asGoVersion(s string) string { return "" } +// excludedForUnifiedBuild lists files that cannot be tested +// when using the unified build's export data. +// TODO(gri) enable as soon as the unified build supports this. +var excludedForUnifiedBuild = map[string]bool{ + "issue47818.go2": true, +} + func testFiles(t *testing.T, filenames []string, colDelta uint, manual bool) { if len(filenames) == 0 { t.Fatal("no source files") } + if buildcfg.Experiment.Unified { + for _, f := range filenames { + if excludedForUnifiedBuild[filepath.Base(f)] { + t.Logf("%s cannot be tested with unified build - skipped", f) + return + } + } + } + var mode syntax.Mode if strings.HasSuffix(filenames[0], ".go2") || manual { mode |= syntax.AllowGenerics diff --git a/src/cmd/compile/internal/types2/decl.go b/src/cmd/compile/internal/types2/decl.go index 739fc163de..91503f1fcd 100644 --- a/src/cmd/compile/internal/types2/decl.go +++ b/src/cmd/compile/internal/types2/decl.go @@ -570,7 +570,7 @@ func (check *Checker) typeDecl(obj *TypeName, tdecl *syntax.TypeDecl, def *Named check.validType(obj.typ, nil) // If typ is local, an error was already reported where typ is specified/defined. if check.isImportedConstraint(rhs) && !check.allowVersion(check.pkg, 1, 18) { - check.versionErrorf(tdecl.Type.Pos(), "go1.18", "using type constraint %s", rhs) + check.versionErrorf(tdecl.Type, "go1.18", "using type constraint %s", rhs) } }).describef(obj, "validType(%s)", obj.Name()) diff --git a/src/cmd/compile/internal/types2/testdata/fixedbugs/issue47818.go2 b/src/cmd/compile/internal/types2/testdata/fixedbugs/issue47818.go2 index 166cc680db..2631118bae 100644 --- a/src/cmd/compile/internal/types2/testdata/fixedbugs/issue47818.go2 +++ b/src/cmd/compile/internal/types2/testdata/fixedbugs/issue47818.go2 @@ -8,6 +8,8 @@ package go1_17 +import "constraints" + type T[P /* ERROR type parameters require go1\.18 or later */ any /* ERROR undeclared name: any \(requires version go1\.18 or later\) */ ] struct{} // for init (and main, but we're not in package main) we should only get one error @@ -56,4 +58,4 @@ type ( _ = C2 ) -// TODO(gri) need test cases for imported constraint types (see also issue #47967) \ No newline at end of file +type Ordered constraints /* ERROR using type constraint constraints\.Ordered requires go1\.18 or later */ .Ordered