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:
Josh Bleecher Snyder 2018-10-25 09:49:53 -07:00
parent a361ef36af
commit 15c4575293
4 changed files with 72 additions and 2 deletions

View file

@ -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