|  | // errorcheck -0 -l -m | 
|  |  | 
|  | // Copyright 2017 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. | 
|  |  | 
|  | // Issue 21709: range expression overly escapes. | 
|  |  | 
|  | package p | 
|  |  | 
|  | type S struct{} | 
|  |  | 
|  | func (s *S) Inc() {} // ERROR "\(\*S\).Inc s does not escape" | 
|  | var N int | 
|  |  | 
|  | func F1() { | 
|  | var s S // ERROR "moved to heap: s" | 
|  | for i := 0; i < N; i++ { | 
|  | fs := []func(){ // ERROR "F1 \[\]func\(\) literal does not escape" | 
|  | s.Inc, // ERROR "F1 s.Inc does not escape" "s escapes to heap" | 
|  | } | 
|  | for _, f := range fs { | 
|  | f() | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | func F2() { | 
|  | var s S // ERROR "moved to heap: s" | 
|  | for i := 0; i < N; i++ { | 
|  | for _, f := range []func(){ // ERROR "F2 \[\]func\(\) literal does not escape" | 
|  | s.Inc, // ERROR "F2 s.Inc does not escape" "s escapes to heap" | 
|  | } { | 
|  | f() | 
|  | } | 
|  | } | 
|  | } |