From f14067f3c10e15343f29aed439ff60af856eb323 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Mon, 29 Oct 2018 17:02:42 -0700 Subject: cmd/compile: when comparing 0-size types, make sure expr side-effects survive Fixes #23837 Change-Id: I53f524d87946a0065f28a4ddbe47b40f2b43c459 Reviewed-on: https://go-review.googlesource.com/c/145757 Run-TryBot: Keith Randall Reviewed-by: Matthew Dempsky --- src/cmd/compile/internal/gc/walk.go | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go index c0fb5bfd28..0e07efa0d9 100644 --- a/src/cmd/compile/internal/gc/walk.go +++ b/src/cmd/compile/internal/gc/walk.go @@ -3297,6 +3297,14 @@ func walkcompare(n *Node, init *Nodes) *Node { } if expr == nil { expr = nodbool(n.Op == OEQ) + // We still need to use cmpl and cmpr, in case they contain + // an expression which might panic. See issue 23837. + t := temp(cmpl.Type) + a1 := nod(OAS, t, cmpl) + a1 = typecheck(a1, Etop) + a2 := nod(OAS, t, cmpr) + a2 = typecheck(a2, Etop) + init.Append(a1, a2) } n = finishcompare(n, expr, init) return n -- cgit v1.3-6-g1900