]> Cypherpunks repositories - gostls13.git/commitdiff
go/ast: fix broken build with typeparams build constraint
authorRob Findley <rfindley@google.com>
Wed, 14 Apr 2021 13:34:28 +0000 (09:34 -0400)
committerRobert Findley <rfindley@google.com>
Wed, 14 Apr 2021 19:32:31 +0000 (19:32 +0000)
My rebase of https://golang.org/cl/300649 before submitting broke the
build (and tests) when using the typeparams build constraint. In a
subsequent CL I add test coverage back to cmd/dist.

This time, I've tested by running:
 - go test -tags=typeparams go/...
 - go test -tags=typeparams cmd/gofmt

All tests pass except for the new TestResolution/typeparams.go2, which I
will fix in a follow-up CL.

For #44933

Change-Id: I439d387841604cf43a90e2ce41dbe6bbbdb0306d
Reviewed-on: https://go-review.googlesource.com/c/go/+/310070
Trust: Robert Findley <rfindley@google.com>
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/ast/walk.go
src/go/ast/walk_typeparams.go

index 9224264e291e2fc8904fc208d94d0915f2e626f4..ac1395fafdb57ec5aa228bf98f3f3055483bdbf2 100644 (file)
@@ -112,7 +112,11 @@ func Walk(v Visitor, node Node) {
 
        case *IndexExpr:
                Walk(v, n.X)
-               Walk(v, n.Index)
+               // n.Index may be nil for invalid type instantiation expressions, e.g.
+               // var x T[].
+               if n.Index != nil {
+                       Walk(v, n.Index)
+               }
 
        case *SliceExpr:
                Walk(v, n.X)
index 77267a5b8c762e52f2acd869f1485dd5ebc21a42..b6621335b8ec41e18186dc25cee6e561ec35884c 100644 (file)
@@ -7,6 +7,10 @@
 
 package ast
 
+import (
+       "fmt"
+)
+
 func walkFuncTypeParams(v Visitor, n *FuncType) {
        if n.TParams != nil {
                Walk(v, n.TParams)
@@ -20,9 +24,11 @@ func walkTypeSpecParams(v Visitor, n *TypeSpec) {
 }
 
 func walkOtherNodes(v Visitor, n Node) {
-       if e, ok := n.(*ast.ListExpr); ok {
+       if e, ok := n.(*ListExpr); ok {
                if e != nil {
-                       Walk(v, e)
+                       for _, elem := range e.ElemList {
+                               Walk(v, elem)
+                       }
                }
        } else {
                panic(fmt.Sprintf("ast.Walk: unexpected node type %T", n))