mirror of
https://github.com/golang/go.git
synced 2025-11-10 05:31:03 +00:00
[dev.regabi] cmd/compile: remove tempAssigns in walkCall1
Passes toolstash -cmp. Change-Id: I588c663324443e02b901cda461b999ff192e150c Reviewed-on: https://go-review.googlesource.com/c/go/+/284896 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
fd9a391cdd
commit
68a4664475
1 changed files with 4 additions and 7 deletions
|
|
@ -521,10 +521,6 @@ func walkCall1(n *ir.CallExpr, init *ir.Nodes) {
|
||||||
n.X = walkExpr(n.X, init)
|
n.X = walkExpr(n.X, init)
|
||||||
walkExprList(args, init)
|
walkExprList(args, init)
|
||||||
|
|
||||||
// For any argument whose evaluation might require a function call,
|
|
||||||
// store that argument into a temporary variable,
|
|
||||||
// to prevent that calls from clobbering arguments already on the stack.
|
|
||||||
var tempAssigns []ir.Node
|
|
||||||
for i, arg := range args {
|
for i, arg := range args {
|
||||||
// Validate argument and parameter types match.
|
// Validate argument and parameter types match.
|
||||||
param := params.Field(i)
|
param := params.Field(i)
|
||||||
|
|
@ -532,17 +528,18 @@ func walkCall1(n *ir.CallExpr, init *ir.Nodes) {
|
||||||
base.FatalfAt(n.Pos(), "assigning %L to parameter %v (type %v)", arg, param.Sym, param.Type)
|
base.FatalfAt(n.Pos(), "assigning %L to parameter %v (type %v)", arg, param.Sym, param.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For any argument whose evaluation might require a function call,
|
||||||
|
// store that argument into a temporary variable,
|
||||||
|
// to prevent that calls from clobbering arguments already on the stack.
|
||||||
if mayCall(arg) {
|
if mayCall(arg) {
|
||||||
// assignment of arg to Temp
|
// assignment of arg to Temp
|
||||||
tmp := typecheck.Temp(param.Type)
|
tmp := typecheck.Temp(param.Type)
|
||||||
a := convas(typecheck.Stmt(ir.NewAssignStmt(base.Pos, tmp, arg)).(*ir.AssignStmt), init)
|
init.Append(convas(typecheck.Stmt(ir.NewAssignStmt(base.Pos, tmp, arg)).(*ir.AssignStmt), init))
|
||||||
tempAssigns = append(tempAssigns, a)
|
|
||||||
// replace arg with temp
|
// replace arg with temp
|
||||||
args[i] = tmp
|
args[i] = tmp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init.Append(tempAssigns...)
|
|
||||||
n.Args = args
|
n.Args = args
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue