mirror of
https://github.com/golang/go
synced 2024-11-11 18:51:37 -07:00
cmd/compile: use callsite as line number for argument marshaling
Don't use the line number of the argument itself, as that may be from arbitrarily earlier in the function. Fixes #60673 Change-Id: Ifc0a2aaae221a256be3a4b0b2e04849bae4b79d7 Reviewed-on: https://go-review.googlesource.com/c/go/+/502656 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Keith Randall <khr@google.com>
This commit is contained in:
parent
992afd9d54
commit
c643b29381
@ -1115,7 +1115,7 @@ func (x *expandState) rewriteArgs(v *Value, firstArg int) {
|
||||
}
|
||||
// "Dereference" of addressed (probably not-SSA-eligible) value becomes Move
|
||||
// TODO(register args) this will be more complicated with registers in the picture.
|
||||
mem = x.rewriteDereference(v.Block, sp, a, mem, aOffset, aux.SizeOfArg(auxI), aType, a.Pos)
|
||||
mem = x.rewriteDereference(v.Block, sp, a, mem, aOffset, aux.SizeOfArg(auxI), aType, v.Pos)
|
||||
} else {
|
||||
var rc registerCursor
|
||||
var result *[]*Value
|
||||
@ -1137,7 +1137,7 @@ func (x *expandState) rewriteArgs(v *Value, firstArg int) {
|
||||
x.Printf("...storeArg %s, %v, %d\n", a.LongString(), aType, aOffset)
|
||||
}
|
||||
rc.init(aRegs, aux.abiInfo, result, sp)
|
||||
mem = x.storeArgOrLoad(a.Pos, v.Block, a, mem, aType, aOffset, 0, rc)
|
||||
mem = x.storeArgOrLoad(v.Pos, v.Block, a, mem, aType, aOffset, 0, rc)
|
||||
}
|
||||
}
|
||||
var preArgStore [2]*Value
|
||||
|
18
test/codegen/issue60673.go
Normal file
18
test/codegen/issue60673.go
Normal file
@ -0,0 +1,18 @@
|
||||
// asmcheck
|
||||
|
||||
// Copyright 2023 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package codegen
|
||||
|
||||
//go:noinline
|
||||
func f(x int32) {
|
||||
}
|
||||
|
||||
func g(p *int32) {
|
||||
// argument marshaling code should live at line 17, not line 15.
|
||||
x := *p
|
||||
// 386: `MOVL\s[A-Z]+,\s\(SP\)`
|
||||
f(x)
|
||||
}
|
Loading…
Reference in New Issue
Block a user