From 6c14059e65b180e3aaf34774b67ddffa461cf3c2 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Sat, 4 Jul 2015 09:07:54 -0700 Subject: [PATCH] [dev.ssa] cmd/compile/ssa: handle loops that don't loop Loops such as func f(c chan int) int { for x := range c { return x } return 0 } don't loop. Remove the assumption that they must. Partly fixes the build. Change-Id: I766cebeec8e36d14512bea26f54c06c8eaf95e23 Reviewed-on: https://go-review.googlesource.com/11876 Reviewed-by: Keith Randall --- src/cmd/compile/internal/gc/ssa.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index b21b4137dc..14c39d337f 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -409,8 +409,11 @@ func (s *state) stmt(n *Node) { s.stmt(n.Right) } b = s.endBlock() - addEdge(b, bCond) - + // If the body ends in a return statement, + // the condition check and loop are unreachable. + if b != nil { + addEdge(b, bCond) + } s.startBlock(bEnd) case OCALLFUNC: -- 2.48.1