github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/ssa/testdata/scopes.go (about) 1 // Copyright 2017 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 "time" 10 ) 11 12 func main() { 13 growstack() // Use stack early to prevent growth during test, which confuses gdb 14 test() 15 } 16 17 //go:noinline 18 func id(x int) int { 19 return x 20 } 21 22 func test() { 23 x := id(0) 24 y := id(0) 25 fmt.Println(x) 26 for i := x; i < 3; i++ { 27 x := i * i 28 y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y) 29 } 30 y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y) 31 fmt.Println(x, y) 32 33 for x := 0; x <= 1; x++ { // From delve scopetest.go 34 a := y 35 f1(a) 36 { 37 b := 0 38 f2(b) 39 if gretbool() { 40 c := 0 41 f3(c) 42 } else { 43 c := 1.1 44 f4(int(c)) 45 } 46 f5(b) 47 } 48 f6(a) 49 } 50 51 { // From delve testnextprog.go 52 var ( 53 j = id(1) 54 f = id(2) 55 ) 56 for i := 0; i <= 5; i++ { 57 j += j * (j ^ 3) / 100 58 if i == f { 59 fmt.Println("foo") 60 break 61 } 62 sleepytime() 63 } 64 helloworld() 65 } 66 } 67 68 func sleepytime() { 69 time.Sleep(5 * time.Millisecond) 70 } 71 72 func helloworld() { 73 fmt.Println("Hello, World!") 74 } 75 76 //go:noinline 77 func f1(x int) {} 78 79 //go:noinline 80 func f2(x int) {} 81 82 //go:noinline 83 func f3(x int) {} 84 85 //go:noinline 86 func f4(x int) {} 87 88 //go:noinline 89 func f5(x int) {} 90 91 //go:noinline 92 func f6(x int) {} 93 94 var boolvar = true 95 96 func gretbool() bool { 97 x := boolvar 98 boolvar = !boolvar 99 return x 100 } 101 102 var sink string 103 104 //go:noinline 105 func growstack() { 106 sink = fmt.Sprintf("%#v,%#v,%#v", 1, true, "cat") 107 }