• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
5package main
6
7import (
8	"fmt"
9	"time"
10)
11
12func main() {
13	growstack() // Use stack early to prevent growth during test, which confuses gdb
14	test()
15}
16
17//go:noinline
18func id(x int) int {
19	return x
20}
21
22func 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
68func sleepytime() {
69	time.Sleep(5 * time.Millisecond)
70}
71
72func helloworld() {
73	fmt.Println("Hello, World!")
74}
75
76//go:noinline
77func f1(x int) {}
78
79//go:noinline
80func f2(x int) {}
81
82//go:noinline
83func f3(x int) {}
84
85//go:noinline
86func f4(x int) {}
87
88//go:noinline
89func f5(x int) {}
90
91//go:noinline
92func f6(x int) {}
93
94var boolvar = true
95
96func gretbool() bool {
97	x := boolvar
98	boolvar = !boolvar
99	return x
100}
101
102var sink string
103
104//go:noinline
105func growstack() {
106	sink = fmt.Sprintf("%#v,%#v,%#v", 1, true, "cat")
107}
108