mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: convert arguments as needed
CL 114797 reworked how arguments get written to the stack. Some type conversions got lost in the process. Restore them. Fixes #28390 Updates #28430 Change-Id: Ia0d37428d7d615c865500bbd1a7a4167554ee34f Reviewed-on: https://go-review.googlesource.com/c/144598 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
a361ef36af
commit
15c4575293
4 changed files with 72 additions and 2 deletions
|
|
@ -1772,10 +1772,22 @@ func walkCall(n *Node, init *Nodes) {
|
|||
var tempAssigns []*Node
|
||||
for i, arg := range args {
|
||||
updateHasCall(arg)
|
||||
if instrumenting || arg.HasCall() {
|
||||
// Determine param type.
|
||||
var t *types.Type
|
||||
if n.Op == OCALLMETH {
|
||||
if i == 0 {
|
||||
t = n.Left.Type.Recv().Type
|
||||
} else {
|
||||
t = params.Field(i - 1).Type
|
||||
}
|
||||
} else {
|
||||
t = params.Field(i).Type
|
||||
}
|
||||
if instrumenting || fncall(arg, t) {
|
||||
// make assignment of fncall to tempname
|
||||
tmp := temp(arg.Type)
|
||||
tmp := temp(t)
|
||||
a := nod(OAS, tmp, arg)
|
||||
a = convas(a, init)
|
||||
tempAssigns = append(tempAssigns, a)
|
||||
// replace arg with temp
|
||||
args[i] = tmp
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue