]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/ssa: set OFOR bBody.Pos to AST Pos
authorPeter Waller <p@pwaller.net>
Mon, 18 Feb 2019 11:09:03 +0000 (11:09 +0000)
committerDaniel Martí <mvdan@mvdan.cc>
Thu, 7 Mar 2019 22:27:52 +0000 (22:27 +0000)
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 <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
src/cmd/compile/internal/gc/ssa.go

index 3f4355c387cc9790821f098048b29afca735eed4..84b9207481dfb4d682a6492f344a5653059b6bb4 100644 (file)
@@ -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 {