[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 <khr@golang.org>
diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go
index b21b413..14c39d3 100644
--- a/src/cmd/compile/internal/gc/ssa.go
+++ b/src/cmd/compile/internal/gc/ssa.go
@@ -409,8 +409,11 @@
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: