From fdded79e6e3256118af182b42714d4d56f2000b0 Mon Sep 17 00:00:00 2001 From: Dan Scales Date: Tue, 9 Mar 2021 18:24:51 -0800 Subject: cmd/compile: fix handling of partially inferred type arguments In the case of partially inferred type arguments, we need to use the IndexExpr as the key in g.info.Inferred[] rather than the CallExpr. Added an extra fromStrings1 call in the settable.go test that tests partially inferred type arguments. This new call uses a new concrete type SettableString as well. I also added another implementation fromStrings3 (derived from a go2go tests) that typechecks but intentionally causes a panic. Change-Id: I74d35c5a741f72f37160a96fbec939451157f392 Reviewed-on: https://go-review.googlesource.com/c/go/+/300309 Run-TryBot: Dan Scales TryBot-Result: Go Bot Trust: Dan Scales Trust: Robert Griesemer Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/noder/expr.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/cmd/compile/internal/noder/expr.go') diff --git a/src/cmd/compile/internal/noder/expr.go b/src/cmd/compile/internal/noder/expr.go index b99f5a4cdd..06aa91199c 100644 --- a/src/cmd/compile/internal/noder/expr.go +++ b/src/cmd/compile/internal/noder/expr.go @@ -96,7 +96,17 @@ func (g *irgen) expr0(typ types2.Type, expr syntax.Expr) ir.Node { case *syntax.CallExpr: fun := g.expr(expr.Fun) - if inferred, ok := g.info.Inferred[expr]; ok && len(inferred.Targs) > 0 { + + // The key for the Inferred map is usually the expr. + key := syntax.Expr(expr) + if _, ok := expr.Fun.(*syntax.IndexExpr); ok { + // If the Fun is an IndexExpr, then this may be a + // partial type inference case. In this case, we look up + // the IndexExpr in the Inferred map. + // TODO(gri): should types2 always record the callExpr as the key? + key = syntax.Expr(expr.Fun) + } + if inferred, ok := g.info.Inferred[key]; ok && len(inferred.Targs) > 0 { targs := make([]ir.Node, len(inferred.Targs)) for i, targ := range inferred.Targs { targs[i] = ir.TypeNode(g.typ(targ)) -- cgit v1.3-5-g9baa