From 1a2435c95f8c68c7d21d172c8a80c6cc96aa9cf5 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Wed, 26 Jan 2022 13:46:45 -0800 Subject: go/types, cmd/compile: fix composite literal structural typing For a composite literal expression like []T{{f: 1}}, we allow T to be a pointer to struct type, so it's consistent to allow T to also be a type parameter whose structural type is a pointer to struct type. Fixes #50833. Change-Id: Ib0781ec4a4f327c875ea25b97740ff2c0c86b916 Reviewed-on: https://go-review.googlesource.com/c/go/+/381075 Run-TryBot: Matthew Dempsky Reviewed-by: Robert Griesemer Trust: Matthew Dempsky TryBot-Result: Gopher Robot --- src/cmd/compile/internal/noder/expr.go | 2 +- 1 file changed, 1 insertion(+), 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 6891d1ec30..8a9afeb095 100644 --- a/src/cmd/compile/internal/noder/expr.go +++ b/src/cmd/compile/internal/noder/expr.go @@ -332,7 +332,7 @@ func (g *irgen) exprs(exprs []syntax.Expr) []ir.Node { } func (g *irgen) compLit(typ types2.Type, lit *syntax.CompositeLit) ir.Node { - if ptr, ok := typ.Underlying().(*types2.Pointer); ok { + if ptr, ok := types2.StructuralType(typ).(*types2.Pointer); ok { n := ir.NewAddrExpr(g.pos(lit), g.compLit(ptr.Elem(), lit)) n.SetOp(ir.OPTRLIT) return typed(g.typ(typ), n) -- cgit v1.3-5-g9baa