We no longer force Value content to escape and the compiler's
escape analysis can handle it now.
Change-Id: I0628f3241e6ef37dce710c2394725e280790479a
Reviewed-on: https://go-review.googlesource.com/c/go/+/542975
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
var i any
var v Value
- // We can uncomment this when compiler escape analysis
- // is good enough to see that the integer assigned to i
- // does not escape and therefore need not be allocated.
- //
- // i = 42 + j
- // v = ValueOf(i)
- // if int(v.Int()) != 42+j {
- // panic("wrong int")
- // }
-
+ i = 42 + j
+ v = ValueOf(i)
+ if int(v.Int()) != 42+j {
+ panic("wrong int")
+ }
+ })
+ noAlloc(t, 100, func(j int) {
+ var i any
+ var v Value
+ i = [3]int{j, j, j}
+ v = ValueOf(i)
+ if v.Len() != 3 {
+ panic("wrong length")
+ }
+ })
+ noAlloc(t, 100, func(j int) {
+ var i any
+ var v Value
i = func(j int) int { return j }
v = ValueOf(i)
if v.Interface().(func(int) int)(j) != j {