diff options
| author | Keith Randall <keithr@alum.mit.edu> | 2019-04-22 18:21:37 -0700 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2019-04-23 17:39:11 +0000 |
| commit | fd788a86b6427ef7ec1f25d4d4f0412bc883ccaf (patch) | |
| tree | de24dbf6706d9235d04fab928762946ce5b4e3b3 /src | |
| parent | a152dd0438c7064edbe64d7d4b18e6a9e5c87760 (diff) | |
| download | go-fd788a86b6427ef7ec1f25d4d4f0412bc883ccaf.tar.xz | |
cmd/compile: always mark atColumn1 results as statements
In 31618, we end up comparing the is-stmt-ness of positions
to repurpose real instructions as inline marks. If the is-stmt-ness
doesn't match, we end up not being able to remove the inline mark.
Always use statement-full positions to do the matching, so we
always find a match if there is one.
Also always use positions that are statements for inline marks.
Fixes #31618
Change-Id: Idaf39bdb32fa45238d5cd52973cadf4504f947d5
Reviewed-on: https://go-review.googlesource.com/c/go/+/173324
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/compile/internal/gc/inl.go | 2 | ||||
| -rw-r--r-- | src/cmd/compile/internal/gc/ssa.go | 1 | ||||
| -rw-r--r-- | src/cmd/internal/src/pos.go | 2 |
3 files changed, 3 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/gc/inl.go b/src/cmd/compile/internal/gc/inl.go index 35cbadafd7..5013c55663 100644 --- a/src/cmd/compile/internal/gc/inl.go +++ b/src/cmd/compile/internal/gc/inl.go @@ -1055,7 +1055,7 @@ func mkinlcall(n, fn *Node, maxCost int32) *Node { // to put a breakpoint. Not sure if that's really necessary or not // (in which case it could go at the end of the function instead). inlMark := nod(OINLMARK, nil, nil) - inlMark.Pos = n.Pos.WithDefaultStmt() + inlMark.Pos = n.Pos.WithIsStmt() inlMark.Xoffset = int64(newIndex) ninit.Append(inlMark) diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 930779045a..0f043d8b5e 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -5369,6 +5369,7 @@ func genssa(f *ssa.Func, pp *Progs) { // We found an instruction with the same source position as // some of the inline marks. // Use this instruction instead. + p.Pos = p.Pos.WithIsStmt() // promote position to a statement pp.curfn.Func.lsym.Func.AddInlMark(p, inlMarks[m]) // Make the inline mark a real nop, so it doesn't generate any code. m.As = obj.ANOP diff --git a/src/cmd/internal/src/pos.go b/src/cmd/internal/src/pos.go index 0e8973fe90..c9d3d347db 100644 --- a/src/cmd/internal/src/pos.go +++ b/src/cmd/internal/src/pos.go @@ -445,5 +445,5 @@ func (x lico) lineNumberHTML() string { } func (x lico) atColumn1() lico { - return makeLico(x.Line(), 1) | (x & (isStmtMask | xlogueMask)) + return makeLico(x.Line(), 1).withIsStmt() } |
