1
0
mirror of https://github.com/golang/go synced 2024-09-29 05:24:32 -06:00

[dev.unified] cmd/compile/internal/noder: implicit conversion of call arguments

Function call arguments need to be implicitly converted to their
respective parameter types. This CL updates the Unified IR writer to
handle this case, at least for typical function calls. I'll handle
f(g()) calls is a subsequent CL.

Change-Id: I7c031d21f57885c9516eaf89eca517977bf9e39a
Reviewed-on: https://go-review.googlesource.com/c/go/+/413514
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Matthew Dempsky 2022-06-21 11:31:11 -07:00
parent 46b01ec667
commit 711dacd8cf

View File

@ -1519,6 +1519,9 @@ func (w *writer) expr(expr syntax.Expr) {
w.Bool(false) // not a method call (i.e., normal function call)
}
sigType := types2.CoreType(tv.Type).(*types2.Signature)
paramTypes := sigType.Params()
w.Code(exprCall)
writeFunExpr()
w.pos(expr)
@ -1527,7 +1530,20 @@ func (w *writer) expr(expr syntax.Expr) {
assert(!expr.HasDots)
w.expr(expr.ArgList[0]) // TODO(mdempsky): Implicit conversions to parameter types.
} else {
w.exprs(expr.ArgList) // TODO(mdempsky): Implicit conversions to parameter types.
// Like w.exprs(expr.ArgList), but with implicit conversions to parameter types.
args := expr.ArgList
w.Sync(pkgbits.SyncExprs)
w.Len(len(args))
for i, arg := range args {
var paramType types2.Type
if sigType.Variadic() && !expr.HasDots && i+1 >= paramTypes.Len() {
paramType = paramTypes.At(paramTypes.Len() - 1).Type().(*types2.Slice).Elem()
} else {
paramType = paramTypes.At(i).Type()
}
w.implicitExpr(expr, paramType, arg)
}
w.Bool(expr.HasDots)
}
}