From 30673769ed7409da0ba1046e874371bf4f07d352 Mon Sep 17 00:00:00 2001 From: Kunpei Sakai Date: Sun, 25 Feb 2018 18:14:20 +0900 Subject: [PATCH] cmd/compile: fix typechecking in finishcompare Previously, finishcompare just used SetTypecheck, but this didn't recursively update any untyped bool typed subexpressions. This CL changes it to call typecheck, which correctly handles this. Also cleaned up outdated code for simplifying logic. Updates #23834 Change-Id: Ic7f92d2a77c2eb74024ee97815205371761c1c90 Reviewed-on: https://go-review.googlesource.com/97035 Reviewed-by: Matthew Dempsky --- src/cmd/compile/internal/gc/walk.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go index b0614219e6..02d216ab62 100644 --- a/src/cmd/compile/internal/gc/walk.go +++ b/src/cmd/compile/internal/gc/walk.go @@ -3452,18 +3452,14 @@ func walkcompare(n *Node, init *Nodes) *Node { // The result of finishcompare MUST be assigned back to n, e.g. // n.Left = finishcompare(n.Left, x, r, init) func finishcompare(n, r *Node, init *Nodes) *Node { - // Use nn here to avoid passing r to typecheck. - nn := r - nn = typecheck(nn, Erv) - nn = walkexpr(nn, init) - r = nn + r = typecheck(r, Erv) + r = walkexpr(r, init) if r.Type != n.Type { r = nod(OCONVNOP, r, nil) r.Type = n.Type - r.SetTypecheck(1) - nn = r + r = typecheck(r, Erv) } - return nn + return r } // isIntOrdering reports whether n is a <, ≤, >, or ≥ ordering between integers. -- 2.48.1