From: Matthew Dempsky Date: Sun, 17 Jan 2021 06:27:23 +0000 (-0800) Subject: [dev.regabi] cmd/compile: fix linux-amd64-noopt builder X-Git-Tag: go1.17beta1~1539^2~81 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e3027c6828230d01089afec0ab958040ba326abc;p=gostls13.git [dev.regabi] cmd/compile: fix linux-amd64-noopt builder CL 284223 tightened down the allowed expressions in mayCall, but evidently a little too tight. The linux-amd64-noopt builder does in fact see expressions with non-empty Init lists in arguments list. Since I believe these can only appear on the RHS of LogicalExpr expressions, this CL relaxes that one case. Change-Id: I1e6bbd0449778c40ed2610b3e1ef6a825a84ada7 Reviewed-on: https://go-review.googlesource.com/c/go/+/284226 Trust: Matthew Dempsky Run-TryBot: Matthew Dempsky TryBot-Result: Go Bot Reviewed-by: Cuong Manh Le --- diff --git a/src/cmd/compile/internal/walk/walk.go b/src/cmd/compile/internal/walk/walk.go index f214551617..399fb2462b 100644 --- a/src/cmd/compile/internal/walk/walk.go +++ b/src/cmd/compile/internal/walk/walk.go @@ -305,6 +305,14 @@ func mayCall(n ir.Node) bool { // before we start marshaling args for a call. See issue 16760. return true + case ir.OANDAND, ir.OOROR: + n := n.(*ir.LogicalExpr) + // The RHS expression may have init statements that + // should only execute conditionally, and so cannot be + // pulled out to the top-level init list. We could try + // to be more precise here. + return len(n.Y.Init()) != 0 + // When using soft-float, these ops might be rewritten to function calls // so we ensure they are evaluated first. case ir.OADD, ir.OSUB, ir.OMUL, ir.ONEG: @@ -318,7 +326,6 @@ func mayCall(n ir.Node) bool { case ir.OLITERAL, ir.ONIL, ir.ONAME, ir.OLINKSYMOFFSET, ir.OMETHEXPR, ir.OAND, ir.OANDNOT, ir.OLSH, ir.OOR, ir.ORSH, ir.OXOR, ir.OCOMPLEX, ir.OEFACE, - ir.OANDAND, ir.OOROR, ir.OADDR, ir.OBITNOT, ir.ONOT, ir.OPLUS, ir.OCAP, ir.OIMAG, ir.OLEN, ir.OREAL, ir.OCONVNOP, ir.ODOT,