Skip to content

fatal error: stack overflow #49805

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wjzhao opened this issue Nov 26, 2021 · 1 comment
Closed

fatal error: stack overflow #49805

wjzhao opened this issue Nov 26, 2021 · 1 comment

Comments

@wjzhao
Copy link

wjzhao commented Nov 26, 2021

What version of Go are you using (go version)?

go version go1.17.3 darwin/arm64

Does this issue reproduce with the latest release?

yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/Library/Caches/go-build"
GOENV="/Users/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.17.3"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1547753750=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

package main

import "fmt"

func deferFunc() int {
	fmt.Println("defer func called")
	return 0
}

func returnFunc() int {
	fmt.Println("return function called")
	return 0
}

func returnAndDefer() int {
	defer deferFunc()
	return returnAndDefer()
}

func main() {
	returnAndDefer()
}

What did you expect to see?

return func called
defer func called

What did you see instead?

runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0x140200f8390 stack=[0x140200f8000, 0x140400f8000]
fatal error: stack overflow

runtime stack:
runtime.throw({0x1040c13b0, 0xe})
	/usr/local/go/src/runtime/panic.go:1198 +0x54
runtime.newstack()
	/usr/local/go/src/runtime/stack.go:1088 +0x56c
runtime.morestack()
	/usr/local/go/src/runtime/asm_arm64.s:303 +0x70

goroutine 1 [running]:
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:15 +0x74 fp=0x140200f8390 sp=0x140200f8390 pc=0x1040bf8f4
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f83c0 sp=0x140200f8390 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f83f0 sp=0x140200f83c0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8420 sp=0x140200f83f0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8450 sp=0x140200f8420 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8480 sp=0x140200f8450 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f84b0 sp=0x140200f8480 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f84e0 sp=0x140200f84b0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8510 sp=0x140200f84e0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8540 sp=0x140200f8510 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8570 sp=0x140200f8540 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f85a0 sp=0x140200f8570 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f85d0 sp=0x140200f85a0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8600 sp=0x140200f85d0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8630 sp=0x140200f8600 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8660 sp=0x140200f8630 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8690 sp=0x140200f8660 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f86c0 sp=0x140200f8690 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f86f0 sp=0x140200f86c0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8720 sp=0x140200f86f0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8750 sp=0x140200f8720 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8780 sp=0x140200f8750 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f87b0 sp=0x140200f8780 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f87e0 sp=0x140200f87b0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8810 sp=0x140200f87e0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8840 sp=0x140200f8810 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8870 sp=0x140200f8840 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f88a0 sp=0x140200f8870 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f88d0 sp=0x140200f88a0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8900 sp=0x140200f88d0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8930 sp=0x140200f8900 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8960 sp=0x140200f8930 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8990 sp=0x140200f8960 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f89c0 sp=0x140200f8990 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f89f0 sp=0x140200f89c0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8a20 sp=0x140200f89f0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8a50 sp=0x140200f8a20 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8a80 sp=0x140200f8a50 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8ab0 sp=0x140200f8a80 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8ae0 sp=0x140200f8ab0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8b10 sp=0x140200f8ae0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8b40 sp=0x140200f8b10 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8b70 sp=0x140200f8b40 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8ba0 sp=0x140200f8b70 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8bd0 sp=0x140200f8ba0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8c00 sp=0x140200f8bd0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8c30 sp=0x140200f8c00 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8c60 sp=0x140200f8c30 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8c90 sp=0x140200f8c60 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8cc0 sp=0x140200f8c90 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8cf0 sp=0x140200f8cc0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8d20 sp=0x140200f8cf0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8d50 sp=0x140200f8d20 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8d80 sp=0x140200f8d50 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8db0 sp=0x140200f8d80 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8de0 sp=0x140200f8db0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8e10 sp=0x140200f8de0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8e40 sp=0x140200f8e10 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8e70 sp=0x140200f8e40 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8ea0 sp=0x140200f8e70 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8ed0 sp=0x140200f8ea0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8f00 sp=0x140200f8ed0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8f30 sp=0x140200f8f00 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8f60 sp=0x140200f8f30 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8f90 sp=0x140200f8f60 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8fc0 sp=0x140200f8f90 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f8ff0 sp=0x140200f8fc0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9020 sp=0x140200f8ff0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9050 sp=0x140200f9020 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9080 sp=0x140200f9050 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f90b0 sp=0x140200f9080 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f90e0 sp=0x140200f90b0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9110 sp=0x140200f90e0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9140 sp=0x140200f9110 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9170 sp=0x140200f9140 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f91a0 sp=0x140200f9170 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f91d0 sp=0x140200f91a0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9200 sp=0x140200f91d0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9230 sp=0x140200f9200 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9260 sp=0x140200f9230 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9290 sp=0x140200f9260 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f92c0 sp=0x140200f9290 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f92f0 sp=0x140200f92c0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9320 sp=0x140200f92f0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9350 sp=0x140200f9320 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9380 sp=0x140200f9350 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f93b0 sp=0x140200f9380 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f93e0 sp=0x140200f93b0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9410 sp=0x140200f93e0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9440 sp=0x140200f9410 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9470 sp=0x140200f9440 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f94a0 sp=0x140200f9470 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f94d0 sp=0x140200f94a0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9500 sp=0x140200f94d0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9530 sp=0x140200f9500 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9560 sp=0x140200f9530 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9590 sp=0x140200f9560 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f95c0 sp=0x140200f9590 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f95f0 sp=0x140200f95c0 pc=0x1040bf8c0
main.returnAndDefer()
	/Users/ireader/project/golang/trace.go:17 +0x40 fp=0x140200f9620 sp=0x140200f95f0 pc=0x1040bf8c0
...additional frames elided...
exit status 2
@seankhliao
Copy link
Member

Your code recuses infinitely (returnAndDefer calls returnAndDefer)

Unlike many projects, the Go project does not use GitHub Issues for general discussion or asking questions. GitHub Issues are used for tracking bugs and proposals only.

For questions please refer to https://github.com/golang/go/wiki/Questions

@golang golang locked and limited conversation to collaborators Nov 26, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants