aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2023-06-12 11:26:28 -0700
committerKeith Randall <khr@golang.org>2023-06-12 20:34:37 +0000
commitc643b2938143ff59d5e854489880e12b39cbfb86 (patch)
tree3853dbc8fd6feafe4af2e76f30a241b007569ccb
parent992afd9d54e011355c18f4e0d3c14040a8d65053 (diff)
downloadgo-c643b2938143ff59d5e854489880e12b39cbfb86.tar.gz
go-c643b2938143ff59d5e854489880e12b39cbfb86.zip
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>
-rw-r--r--src/cmd/compile/internal/ssa/expand_calls.go4
-rw-r--r--test/codegen/issue60673.go18
2 files changed, 20 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/ssa/expand_calls.go b/src/cmd/compile/internal/ssa/expand_calls.go
index 26a944dfae..dcd8078353 100644
--- a/src/cmd/compile/internal/ssa/expand_calls.go
+++ b/src/cmd/compile/internal/ssa/expand_calls.go
@@ -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
diff --git a/test/codegen/issue60673.go b/test/codegen/issue60673.go
new file mode 100644
index 0000000000..2df031a9cf
--- /dev/null
+++ b/test/codegen/issue60673.go
@@ -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)
+}