Skip to content

Commit

Permalink
[dev.unified] cmd/compile/internal/noder: implicit conversion of call…
Browse files Browse the repository at this point in the history
… 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>
  • Loading branch information
mdempsky committed Jun 23, 2022
1 parent 46b01ec commit 711dacd
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion src/cmd/compile/internal/noder/writer.go
Expand Up @@ -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)
Expand All @@ -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)
}
}
Expand Down

0 comments on commit 711dacd

Please sign in to comment.