From: Robert Griesemer Date: Tue, 21 Mar 2023 20:59:24 +0000 (-0700) Subject: cmd/compile/internal/types2: respect commaerr in Checker.exprList X-Git-Tag: go1.21rc1~1201 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8e19d2bbaf787600b9ee26949dbb719bf719d583;p=gostls13.git 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 --- 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 }