github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/loopvar/testdata/for_esc_closure.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "fmt" 9 "os" 10 ) 11 12 var is []func() int 13 14 func main() { 15 sum := 0 16 for i := 0; i < 10; i++ { 17 for j := 0; j < 10; j++ { 18 if i == j { // 10 skips 19 continue 20 } 21 sum++ 22 } 23 if i&1 == 0 { 24 is = append(is, func() int { 25 if i%17 == 15 { 26 i++ 27 } 28 return i 29 }) 30 } 31 } 32 33 bug := false 34 if sum != 100-10 { 35 fmt.Printf("wrong sum, expected %d, saw %d\n", 90, sum) 36 bug = true 37 } 38 sum = 0 39 for _, f := range is { 40 sum += f() 41 } 42 if sum != 2+4+6+8 { 43 fmt.Printf("wrong sum, expected %d, saw %d\n", 20, sum) 44 bug = true 45 } 46 if !bug { 47 fmt.Printf("PASS\n") 48 } else { 49 os.Exit(11) 50 } 51 }