From: Josh Bleecher Snyder Date: Fri, 17 Jul 2015 16:45:48 +0000 (-0600) Subject: [dev.ssa] cmd/compile: handle OpCopy loops in rewrite X-Git-Tag: go1.7beta1~1623^2^2~380 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f421735bb4a139ecd59afc78b2b98df6327464cf;p=gostls13.git [dev.ssa] cmd/compile: handle OpCopy loops in rewrite Change-Id: Icbaad6e5cbfc5430a651538fe90c0a9ee664faf4 Reviewed-on: https://go-review.googlesource.com/12360 Reviewed-by: Keith Randall --- diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index 306fe1274e..60368784e8 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -42,7 +42,10 @@ func applyRewrite(f *Func, rb func(*Block) bool, rv func(*Value, *Config) bool) if a.Op != OpCopy { continue } - for a.Op == OpCopy { + // Rewriting can generate OpCopy loops. + // They are harmless (see removePredecessor), + // but take care not to loop forever. + for a.Op == OpCopy && a != a.Args[0] { a = a.Args[0] } v.Args[i] = a