From: Peter Waller Date: Mon, 18 Feb 2019 11:09:03 +0000 (+0000) Subject: cmd/compile/internal/ssa: set OFOR bBody.Pos to AST Pos X-Git-Tag: go1.13beta1~1152 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7afd58d4581925788e1ef28ff817784d2585b92f;p=gostls13.git cmd/compile/internal/ssa: set OFOR bBody.Pos to AST Pos Assign SSA OFOR's bBody.Pos to AST (*Node).Pos as it is created. An empty for loop has no other information which may be used to give correct position information in the resulting executable. Such a for loop may compile to a single `JMP *self` and it is important that the location of this is in the right place. Fixes #30167. Change-Id: Iec44f0281c462c33fac6b7b8ccfc2ef37434c247 Reviewed-on: https://go-review.googlesource.com/c/go/+/163019 Run-TryBot: David Chase TryBot-Result: Gobot Gobot Reviewed-by: David Chase --- diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 3f4355c387..84b9207481 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -1077,6 +1077,9 @@ func (s *state) stmt(n *Node) { bIncr := s.f.NewBlock(ssa.BlockPlain) bEnd := s.f.NewBlock(ssa.BlockPlain) + // ensure empty for loops have correct position; issue #30167 + bBody.Pos = n.Pos + // first, jump to condition test (OFOR) or body (OFORUNTIL) b := s.endBlock() if n.Op == OFOR {