diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/compile/internal/gc/range.go | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/cmd/compile/internal/gc/range.go b/src/cmd/compile/internal/gc/range.go index c9f2f01282..1b423ed36c 100644 --- a/src/cmd/compile/internal/gc/range.go +++ b/src/cmd/compile/internal/gc/range.go @@ -155,27 +155,36 @@ func walkrange(n *Node) *Node { lno := setlineno(a) n.Right = nil - var v1 *Node - if n.List.Len() != 0 { + var v1, v2 *Node + l := n.List.Len() + if l > 0 { v1 = n.List.First() } - var v2 *Node - if n.List.Len() > 1 && !isblank(n.List.Second()) { + + if l > 1 { v2 = n.List.Second() } - if v1 == nil && v2 != nil { - Fatalf("walkrange: v2 != nil while v1 == nil") + if isblank(v2) { + v2 = nil } - var ifGuard *Node + if isblank(v1) && v2 == nil { + v1 = nil + } - translatedLoopOp := OFOR + if v1 == nil && v2 != nil { + Fatalf("walkrange: v2 != nil while v1 == nil") + } // n.List has no meaning anymore, clear it // to avoid erroneous processing by racewalk. n.List.Set(nil) + var ifGuard *Node + + translatedLoopOp := OFOR + var body []*Node var init []*Node switch t.Etype { |
