mirror of https://github.com/golang/go.git
cmd/compile: explain special treatment when rewrite slice literal args
Followup discussion in CL 360055. Change-Id: I36212c2a497b152d01ed86d244d5f57bd34a64a6 Reviewed-on: https://go-review.googlesource.com/c/go/+/360614 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
parent
f2ff1c6074
commit
58fb05a24a
|
|
@ -333,7 +333,24 @@ func (e *escape) rewriteArgument(argp *ir.Node, init *ir.Nodes, call ir.Node, fn
|
|||
}
|
||||
}
|
||||
|
||||
// Peel away any slice lits.
|
||||
// Peel away any slice literals for better escape analyze
|
||||
// them. For example:
|
||||
//
|
||||
// go F([]int{a, b})
|
||||
//
|
||||
// If F doesn't escape its arguments, then the slice can
|
||||
// be allocated on the new goroutine's stack.
|
||||
//
|
||||
// For variadic functions, the compiler has already rewritten:
|
||||
//
|
||||
// f(a, b, c)
|
||||
//
|
||||
// to:
|
||||
//
|
||||
// f([]T{a, b, c}...)
|
||||
//
|
||||
// So we need to look into slice elements to handle uintptr(ptr)
|
||||
// arguments to syscall-like functions correctly.
|
||||
if arg := *argp; arg.Op() == ir.OSLICELIT {
|
||||
list := arg.(*ir.CompLitExpr).List
|
||||
for i := range list {
|
||||
|
|
|
|||
Loading…
Reference in New Issue