mirror of
https://github.com/golang/go
synced 2024-11-26 12:37:57 -07: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
@ -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…
Reference in New Issue
Block a user