Somehow we missed this!
Fixes #11387.
Change-Id: Ida08fe52eff7da2ef7765b4cf35a39a301420c43
Reviewed-on: https://go-review.googlesource.com/11460
Reviewed-by: David Chase <drchase@google.com>
}
escassignDereference(e, &e.theSink, n.List.N) // The original elements are now leaked, too
+ case OCOPY:
+ escassignDereference(e, &e.theSink, n.Right) // lose track of assign of dereference
+
case OCONV, OCONVNOP:
escassign(e, n, n.Left)
var y []*int
-// does not leak x
-func foo104(x []*int) { // ERROR "foo104 x does not escape$"
+// does not leak x but does leak content
+func foo104(x []*int) { // ERROR "leaking param content: x"
copy(y, x)
}
}
_ = f
}
+
+func issue11387(x int) func() int {
+ f := func() int { return x } // ERROR "func literal escapes to heap"
+ slice1 := []func() int{f} // ERROR "\[\].* does not escape"
+ slice2 := make([]func() int, 1) // ERROR "make\(.*\) does not escape"
+ copy(slice2, slice1)
+ return slice2[0]
+}
var y []*int
-// does not leak x
-func foo104(x []*int) { // ERROR "foo104 x does not escape$"
+// does not leak x but does leak content
+func foo104(x []*int) { // ERROR "leaking param content: x"
copy(y, x)
}
}
_ = f
}
+
+func issue11387(x int) func() int {
+ f := func() int { return x } // ERROR "func literal escapes to heap"
+ slice1 := []func() int{f} // ERROR "\[\].* does not escape"
+ slice2 := make([]func() int, 1) // ERROR "make\(.*\) does not escape"
+ copy(slice2, slice1)
+ return slice2[0]
+}