]> Cypherpunks repositories - gostls13.git/commitdiff
go/types, types2: validType argument must be *Named type
authorRobert Griesemer <gri@golang.org>
Wed, 19 Jan 2022 06:30:03 +0000 (22:30 -0800)
committerRobert Griesemer <gri@golang.org>
Mon, 24 Jan 2022 21:27:20 +0000 (21:27 +0000)
Now that we have a separate top-level entry point for validType
we can use the more narrow type *Named (instead of Type) for its
argument.

Preparation for fixing issue #48962.

Change-Id: I93aee4abc87036c6a68323dc970efe8e617a9103
Reviewed-on: https://go-review.googlesource.com/c/go/+/379434
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/compile/internal/types2/decl.go
src/cmd/compile/internal/types2/validtype.go
src/go/types/decl.go
src/go/types/validtype.go

index ab2983c80fbeba9e6975f7d7c46d67ac4ed5493c..41093cb6372ae8abd5e9c8be43113178f65512fb 100644 (file)
@@ -477,7 +477,9 @@ func (check *Checker) typeDecl(obj *TypeName, tdecl *syntax.TypeDecl, def *Named
 
        var rhs Type
        check.later(func() {
-               check.validType(obj.typ)
+               if t, _ := obj.typ.(*Named); t != nil { // type may be invalid
+                       check.validType(t)
+               }
                // 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, "go1.18", "using type constraint %s", rhs)
index 9cb427b44d814e44d1803f4bf70bb070f4ba7d41..c7f7c13169818f8a2e0037853d9c3533cc5bf6e5 100644 (file)
@@ -9,7 +9,7 @@ package types2
 // defined types.
 // (Cycles involving alias types, as in "type A = [10]A" are detected
 // earlier, via the objDecl cycle detection mechanism.)
-func (check *Checker) validType(typ Type) {
+func (check *Checker) validType(typ *Named) {
        check.validType0(typ, nil)
 }
 
index a9e89464f67118d12f14b47021b4aaebd423885d..043f02491d1bda7df100e42bc815ab0eac1e4d3d 100644 (file)
@@ -530,7 +530,9 @@ func (check *Checker) typeDecl(obj *TypeName, tdecl *ast.TypeSpec, def *Named) {
 
        var rhs Type
        check.later(func() {
-               check.validType(obj.typ)
+               if t, _ := obj.typ.(*Named); t != nil { // type may be invalid
+                       check.validType(t)
+               }
                // 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.errorf(tdecl.Type, _UnsupportedFeature, "using type constraint %s requires go1.18 or later", rhs)
index d20a2b5bfaf3b19c8b2cd4effeaf09387328a1bc..c0e6ee34f6536dc544c30fb746b4d89e5d65510d 100644 (file)
@@ -9,7 +9,7 @@ package types
 // defined types.
 // (Cycles involving alias types, as in "type A = [10]A" are detected
 // earlier, via the objDecl cycle detection mechanism.)
-func (check *Checker) validType(typ Type) {
+func (check *Checker) validType(typ *Named) {
        check.validType0(typ, nil)
 }