mirror of
https://github.com/golang/go
synced 2024-11-16 20:54:48 -07:00
cmd/compile: fix libfuzzer instrumentation line number
Set a reasonable starting line number before processing the body of the function in the order pass. We update base.Pos each time we process a node, but some of the libfuzzer instrumentation is added before we process any node, so the base.Pos used is junk. Fixes #53688 Change-Id: I3654b805eabb8866a9a1574845ef4ff062797319 Reviewed-on: https://go-review.googlesource.com/c/go/+/416654 Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Keith Randall <khr@google.com> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
5c1a13e7a4
commit
c1a4e0fe01
@ -63,7 +63,7 @@ func order(fn *ir.Func) {
|
||||
s := fmt.Sprintf("\nbefore order %v", fn.Sym())
|
||||
ir.DumpList(s, fn.Body)
|
||||
}
|
||||
|
||||
ir.SetPos(fn) // Set reasonable position for instrumenting code. See issue 53688.
|
||||
orderBlock(&fn.Body, map[string][]*ir.Name{})
|
||||
}
|
||||
|
||||
@ -477,6 +477,12 @@ func (o *orderState) edge() {
|
||||
// and then replaces the old slice in n with the new slice.
|
||||
// free is a map that can be used to obtain temporary variables by type.
|
||||
func orderBlock(n *ir.Nodes, free map[string][]*ir.Name) {
|
||||
if len(*n) != 0 {
|
||||
// Set reasonable position for instrumenting code. See issue 53688.
|
||||
// It would be nice if ir.Nodes had a position (the opening {, probably),
|
||||
// but it doesn't. So we use the first statement's position instead.
|
||||
ir.SetPos((*n)[0])
|
||||
}
|
||||
var order orderState
|
||||
order.free = free
|
||||
mark := order.markTemp()
|
||||
|
Loading…
Reference in New Issue
Block a user