mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
![Cherry Mui](/assets/img/avatar_default.png)
When compiling runtime, we don't allow closures to escape, because we don't want (implicit) allocations to occur when it is not okay to allocate (e.g. in the allocator itself). However, for go statement, it already allocates a new goroutine anyway. It is okay to allocate the closure. Allow it. Also include the closure's name when reporting error. Updates #40724. Change-Id: Id7574ed17cc27709609a059c4eaa67ba1c4436dc Reviewed-on: https://go-review.googlesource.com/c/go/+/325109 Trust: Cherry Mui <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
19 lines
535 B
Go
19 lines
535 B
Go
// errorcheck -+
|
|
|
|
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package p
|
|
|
|
func f(x int) func(int) int {
|
|
return func(y int) int { return x + y } // ERROR "heap-allocated closure f\.func1, not allowed in runtime"
|
|
}
|
|
|
|
func g(x int) func(int) int { // ERROR "x escapes to heap, not allowed in runtime"
|
|
return func(y int) int { // ERROR "heap-allocated closure g\.func1, not allowed in runtime"
|
|
x += y
|
|
return x + y
|
|
}
|
|
}
|