Skip to content
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

errors: unbounded recursion with array Unwrap() #59098

Closed
zx2c4 opened this issue Mar 17, 2023 · 3 comments
Closed

errors: unbounded recursion with array Unwrap() #59098

zx2c4 opened this issue Mar 17, 2023 · 3 comments
Labels
FrozenDueToAge NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made.
Milestone

Comments

@zx2c4
Copy link
Contributor

zx2c4 commented Mar 17, 2023

I'm not sure if this should be considered a bug or not, but this code will cause a stack overflow:

package main

import "errors"

type a map[int]int

func (a a) Error() string {
	return ""
}

func (a a) Unwrap() []error {
	return []error{a}
}

func main() {
	var a a
	errors.Is(a, a)
}
zx2c4@thinkpad /tmp $ go run a.go
runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0xc020160360 stack=[0xc020160000, 0xc040160000]
fatal error: stack overflow

runtime stack:
runtime.throw({0x4685af?, 0x4c28c0?})
        /usr/lib/go/src/runtime/panic.go:1047 +0x5d fp=0xc00009de18 sp=0xc00009dde8 pc=0x42c99d
runtime.newstack()
        /usr/lib/go/src/runtime/stack.go:1105 +0x5bd fp=0xc00009dfc8 sp=0xc00009de18 pc=0x44411d
runtime.morestack()
        /usr/lib/go/src/runtime/asm_amd64.s:574 +0x8b fp=0xc00009dfd0 sp=0xc00009dfc8 pc=0x454f8b

goroutine 1 [running]:
runtime.deductAssistCredit(0x10?)
        /usr/lib/go/src/runtime/malloc.go:1201 +0x7b fp=0xc020160370 sp=0xc020160368 pc=0x40b43b
runtime.mallocgc(0x10, 0x45e180, 0x1)
        /usr/lib/go/src/runtime/malloc.go:932 +0xd0 fp=0xc0201603d8 sp=0xc020160370 pc=0x40ac30
runtime.newobject(0x4613c0?)
        /usr/lib/go/src/runtime/malloc.go:1254 +0x27 fp=0xc020160400 sp=0xc0201603d8 pc=0x40b547
main.a.Unwrap(0x0)
        /tmp/a.go:12 +0x25 fp=0xc020160420 sp=0xc020160400 pc=0x4589c5
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:63 +0x202 fp=0xc020160498 sp=0xc020160420 pc=0x458842
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160510 sp=0xc020160498 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160588 sp=0xc020160510 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160600 sp=0xc020160588 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160678 sp=0xc020160600 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201606f0 sp=0xc020160678 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160768 sp=0xc0201606f0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201607e0 sp=0xc020160768 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160858 sp=0xc0201607e0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201608d0 sp=0xc020160858 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160948 sp=0xc0201608d0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201609c0 sp=0xc020160948 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160a38 sp=0xc0201609c0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160ab0 sp=0xc020160a38 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160b28 sp=0xc020160ab0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160ba0 sp=0xc020160b28 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160c18 sp=0xc020160ba0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160c90 sp=0xc020160c18 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160d08 sp=0xc020160c90 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160d80 sp=0xc020160d08 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160df8 sp=0xc020160d80 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160e70 sp=0xc020160df8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160ee8 sp=0xc020160e70 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160f60 sp=0xc020160ee8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020160fd8 sp=0xc020160f60 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161050 sp=0xc020160fd8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201610c8 sp=0xc020161050 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161140 sp=0xc0201610c8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201611b8 sp=0xc020161140 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161230 sp=0xc0201611b8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201612a8 sp=0xc020161230 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161320 sp=0xc0201612a8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161398 sp=0xc020161320 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161410 sp=0xc020161398 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161488 sp=0xc020161410 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161500 sp=0xc020161488 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161578 sp=0xc020161500 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201615f0 sp=0xc020161578 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161668 sp=0xc0201615f0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201616e0 sp=0xc020161668 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161758 sp=0xc0201616e0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201617d0 sp=0xc020161758 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161848 sp=0xc0201617d0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201618c0 sp=0xc020161848 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161938 sp=0xc0201618c0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201619b0 sp=0xc020161938 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161a28 sp=0xc0201619b0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161aa0 sp=0xc020161a28 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161b18 sp=0xc020161aa0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161b90 sp=0xc020161b18 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161c08 sp=0xc020161b90 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161c80 sp=0xc020161c08 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161cf8 sp=0xc020161c80 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161d70 sp=0xc020161cf8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161de8 sp=0xc020161d70 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161e60 sp=0xc020161de8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161ed8 sp=0xc020161e60 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161f50 sp=0xc020161ed8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020161fc8 sp=0xc020161f50 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162040 sp=0xc020161fc8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201620b8 sp=0xc020162040 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162130 sp=0xc0201620b8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201621a8 sp=0xc020162130 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162220 sp=0xc0201621a8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162298 sp=0xc020162220 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162310 sp=0xc020162298 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162388 sp=0xc020162310 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162400 sp=0xc020162388 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162478 sp=0xc020162400 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201624f0 sp=0xc020162478 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162568 sp=0xc0201624f0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201625e0 sp=0xc020162568 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162658 sp=0xc0201625e0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201626d0 sp=0xc020162658 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162748 sp=0xc0201626d0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201627c0 sp=0xc020162748 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162838 sp=0xc0201627c0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201628b0 sp=0xc020162838 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162928 sp=0xc0201628b0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201629a0 sp=0xc020162928 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162a18 sp=0xc0201629a0 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162a90 sp=0xc020162a18 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162b08 sp=0xc020162a90 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162b80 sp=0xc020162b08 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162bf8 sp=0xc020162b80 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162c70 sp=0xc020162bf8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162ce8 sp=0xc020162c70 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162d60 sp=0xc020162ce8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162dd8 sp=0xc020162d60 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162e50 sp=0xc020162dd8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162ec8 sp=0xc020162e50 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162f40 sp=0xc020162ec8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020162fb8 sp=0xc020162f40 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020163030 sp=0xc020162fb8 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc0201630a8 sp=0xc020163030 pc=0x4588ae
errors.Is({0x47db38, 0x0}, {0x47db38, 0x0})
        /usr/lib/go/src/errors/wrap.go:64 +0x26e fp=0xc020163120 sp=0xc0201630a8 pc=0x4588ae
...additional frames elided...

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc000064fb0 sp=0xc000064f90 pc=0x42f6b6
runtime.goparkunlock(...)
        /usr/lib/go/src/runtime/proc.go:387
runtime.forcegchelper()
        /usr/lib/go/src/runtime/proc.go:305 +0xb0 fp=0xc000064fe0 sp=0xc000064fb0 pc=0x42f4f0
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000064fe8 sp=0xc000064fe0 pc=0x455221
created by runtime.init.6
        /usr/lib/go/src/runtime/proc.go:293 +0x25

goroutine 3 [GC sweep wait]:
runtime.gopark(0x1?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc000065780 sp=0xc000065760 pc=0x42f6b6
runtime.goparkunlock(...)
        /usr/lib/go/src/runtime/proc.go:387
runtime.bgsweep(0x0?)
        /usr/lib/go/src/runtime/mgcsweep.go:319 +0xde fp=0xc0000657c8 sp=0xc000065780 pc=0x41cebe
runtime.gcenable.func1()
        /usr/lib/go/src/runtime/mgc.go:178 +0x26 fp=0xc0000657e0 sp=0xc0000657c8 pc=0x412346
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000657e8 sp=0xc0000657e0 pc=0x455221
created by runtime.gcenable
        /usr/lib/go/src/runtime/mgc.go:178 +0x6b

goroutine 4 [GC scavenge wait]:
runtime.gopark(0x962a31c030bf?, 0x114e457?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc000065f70 sp=0xc000065f50 pc=0x42f6b6
runtime.goparkunlock(...)
        /usr/lib/go/src/runtime/proc.go:387
runtime.(*scavengerState).park(0x4c5a40)
        /usr/lib/go/src/runtime/mgcscavenge.go:400 +0x53 fp=0xc000065fa0 sp=0xc000065f70 pc=0x41adb3
runtime.bgscavenge(0x0?)
        /usr/lib/go/src/runtime/mgcscavenge.go:633 +0x65 fp=0xc000065fc8 sp=0xc000065fa0 pc=0x41b3a5
runtime.gcenable.func2()
        /usr/lib/go/src/runtime/mgc.go:179 +0x26 fp=0xc000065fe0 sp=0xc000065fc8 pc=0x4122e6
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000065fe8 sp=0xc000065fe0 pc=0x455221
created by runtime.gcenable
        /usr/lib/go/src/runtime/mgc.go:179 +0xaa

goroutine 17 [GC worker (idle)]:
runtime.gopark(0x412201?, 0x0?, 0xe0?, 0xd4?, 0xc000024070?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc000064750 sp=0xc000064730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000647e0 sp=0xc000064750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000647e8 sp=0xc0000647e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 5 [GC worker (idle)]:
runtime.gopark(0x962a45f12b16?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc000066750 sp=0xc000066730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000667e0 sp=0xc000066750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000667e8 sp=0xc0000667e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 18 [GC worker (idle)]:
runtime.gopark(0x962a45f16a20?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc000060750 sp=0xc000060730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000607e0 sp=0xc000060750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000607e8 sp=0xc0000607e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 19 [GC worker (idle)]:
runtime.gopark(0x962a45f12c29?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc000060f50 sp=0xc000060f30 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc000060fe0 sp=0xc000060f50 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc000060fe8 sp=0xc000060fe0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 33 [GC worker (idle)]:
runtime.gopark(0x962a45f1559e?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000aa750 sp=0xc0000aa730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000aa7e0 sp=0xc0000aa750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000aa7e8 sp=0xc0000aa7e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 34 [GC worker (idle)]:
runtime.gopark(0x962a45f132f7?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000aaf50 sp=0xc0000aaf30 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000aafe0 sp=0xc0000aaf50 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000aafe8 sp=0xc0000aafe0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 35 [GC worker (idle)]:
runtime.gopark(0x962a45f120db?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000ab750 sp=0xc0000ab730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000ab7e0 sp=0xc0000ab750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000ab7e8 sp=0xc0000ab7e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 36 [GC worker (idle)]:
runtime.gopark(0x962a45f12ed6?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000abf50 sp=0xc0000abf30 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000abfe0 sp=0xc0000abf50 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000abfe8 sp=0xc0000abfe0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 37 [GC worker (idle)]:
runtime.gopark(0x962a45f13278?, 0x1?, 0x55?, 0x49?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000ac750 sp=0xc0000ac730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000ac7e0 sp=0xc0000ac750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000ac7e8 sp=0xc0000ac7e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 38 [GC worker (idle)]:
runtime.gopark(0x962a45f1218f?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000acf50 sp=0xc0000acf30 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000acfe0 sp=0xc0000acf50 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000acfe8 sp=0xc0000acfe0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 39 [GC worker (idle)]:
runtime.gopark(0x4f3c80?, 0x1?, 0x18?, 0x5b?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000ad750 sp=0xc0000ad730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000ad7e0 sp=0xc0000ad750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000ad7e8 sp=0xc0000ad7e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 40 [GC worker (idle)]:
runtime.gopark(0x962a45f13225?, 0x3?, 0x77?, 0xc4?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000adf50 sp=0xc0000adf30 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000adfe0 sp=0xc0000adf50 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000adfe8 sp=0xc0000adfe0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 20 [GC worker (idle)]:
runtime.gopark(0x962a45f13a30?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc000061750 sp=0xc000061730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000617e0 sp=0xc000061750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000617e8 sp=0xc0000617e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 41 [GC worker (idle)]:
runtime.gopark(0x962a45f12f2e?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc0000a6750 sp=0xc0000a6730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc0000a67e0 sp=0xc0000a6750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0000a67e8 sp=0xc0000a67e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 49 [GC worker (idle)]:
runtime.gopark(0x4f3c80?, 0x3?, 0xc2?, 0x14?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc00050e750 sp=0xc00050e730 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc00050e7e0 sp=0xc00050e750 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00050e7e8 sp=0xc00050e7e0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25

goroutine 50 [GC worker (idle)]:
runtime.gopark(0x962a45f13e30?, 0x1?, 0xcf?, 0x45?, 0x0?)
        /usr/lib/go/src/runtime/proc.go:381 +0xd6 fp=0xc00050ef50 sp=0xc00050ef30 pc=0x42f6b6
runtime.gcBgMarkWorker()
        /usr/lib/go/src/runtime/mgc.go:1275 +0xf1 fp=0xc00050efe0 sp=0xc00050ef50 pc=0x413eb1
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00050efe8 sp=0xc00050efe0 pc=0x455221
created by runtime.gcBgMarkStartWorkers
        /usr/lib/go/src/runtime/mgc.go:1199 +0x25
exit status 2
@cherrymui
Copy link
Member

This is probably working as intended, as a.Unwrap creates a cycle.

cc @neild to decide.

@cherrymui cherrymui added the NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made. label Mar 17, 2023
@cherrymui cherrymui added this to the Backlog milestone Mar 17, 2023
@neild
Copy link
Contributor

neild commented Mar 17, 2023

This is working as expected. Error unwrapping chains/trees must not contain cycles.

@zx2c4
Copy link
Contributor Author

zx2c4 commented Mar 17, 2023

Okay.

@zx2c4 zx2c4 closed this as completed Mar 17, 2023
@golang golang locked and limited conversation to collaborators Mar 16, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsDecision Feedback is required from experts, contributors, and/or the community before a change can be made.
Projects
None yet
Development

No branches or pull requests

4 participants