From: Matthew Dempsky Date: Thu, 3 Dec 2015 20:14:07 +0000 (-0800) Subject: cmd/compile: fix live variable reuse in orderstmt X-Git-Tag: go1.6beta1~210 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7a4022ee36ec1b45233f6d9ae19e336f8a64a215;p=gostls13.git cmd/compile: fix live variable reuse in orderstmt The call "poptemp(t, order)" at line 906 should match up with the assignment "t := marktemp(order)" at line 770, so use a new temporary variable for stripping the ODCL nodes from a "case x := <-ch" node's Ninit list. Fixes #13469. Passes toolstash/buildall. Change-Id: Ia7eabd40c79cfdcb83df00b6fbd0954e0c44c5c7 Reviewed-on: https://go-review.googlesource.com/17393 Reviewed-by: Keith Randall Run-TryBot: Matthew Dempsky --- diff --git a/src/cmd/compile/internal/gc/order.go b/src/cmd/compile/internal/gc/order.go index 04ab2b0a84..84b96c2d7b 100644 --- a/src/cmd/compile/internal/gc/order.go +++ b/src/cmd/compile/internal/gc/order.go @@ -796,14 +796,14 @@ func orderstmt(n *Node, order *Order) { // Delete the ODCL nodes here and recreate them inside the body below. case OSELRECV, OSELRECV2: if r.Colas { - t = r.Ninit - if t != nil && t.N.Op == ODCL && t.N.Left == r.Left { - t = t.Next + init := r.Ninit + if init != nil && init.N.Op == ODCL && init.N.Left == r.Left { + init = init.Next } - if t != nil && t.N.Op == ODCL && r.List != nil && t.N.Left == r.List.N { - t = t.Next + if init != nil && init.N.Op == ODCL && r.List != nil && init.N.Left == r.List.N { + init = init.Next } - if t == nil { + if init == nil { r.Ninit = nil } }