From 8e19d2bbaf787600b9ee26949dbb719bf719d583 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 21 Mar 2023 13:59:24 -0700 Subject: [PATCH] cmd/compile/internal/types2: respect commaerr in Checker.exprList The changes to exprList (in call.go), made in CL 282193, didn't get faithfully ported to types2: in the case of operand mode commaerr, unpacking didn't correctly set the type of the 2nd value to error. This shouldn't matter for the compiler, but the code differs from the go/types version. Make them the same. Change-Id: I6f69575f9ad4f43169b851dffeed85c19588a261 Reviewed-on: https://go-review.googlesource.com/c/go/+/478255 Run-TryBot: Robert Griesemer TryBot-Result: Gopher Robot Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/call.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/types2/call.go b/src/cmd/compile/internal/types2/call.go index 3f5c12599a..db83d58fcc 100644 --- a/src/cmd/compile/internal/types2/call.go +++ b/src/cmd/compile/internal/types2/call.go @@ -283,8 +283,11 @@ func (check *Checker) exprList(elist []syntax.Expr, allowCommaOk bool) (xlist [] // exactly one (possibly invalid or comma-ok) value xlist = []*operand{&x} if allowCommaOk && (x.mode == mapindex || x.mode == commaok || x.mode == commaerr) { - x.mode = value - xlist = append(xlist, &operand{mode: value, expr: e, typ: Typ[UntypedBool]}) + x2 := &operand{mode: value, expr: e, typ: Typ[UntypedBool]} + if x.mode == commaerr { + x2.typ = universeError + } + xlist = append(xlist, x2) commaOk = true } -- 2.50.0