Skip to content

cmd/compile: fail to compile package in 1.24 #71680

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
sluongng opened this issue Feb 12, 2025 · 13 comments
Closed

cmd/compile: fail to compile package in 1.24 #71680

sluongng opened this issue Feb 12, 2025 · 13 comments
Labels
BugReport Issues describing a possible bug in the Go implementation. compiler/runtime Issues related to the Go compiler and/or runtime. Critical A critical problem that affects the availability or correctness of production systems built using Go NeedsFix The path to resolution is known, but the work has not been done.
Milestone

Comments

@sluongng
Copy link

sluongng commented Feb 12, 2025

Go version

go1.24.0 linux/amd64

Output of go env in your module/workspace:

WORK=/tmp/rules_go_work-248807356
PATH=/usr/bin:/bin \
HOSTNAME=localhost \
CGO_ENABLED=1 \
GOARCH=amd64 \
GODEBUG=winsymlink=0 \
GOEXPERIMENT=nocoverageredesign \
GOOS=linux \
GOPATH= \
GOROOT_FINAL=GOROOT \
GOTOOLCHAIN=local \
DEBIAN_FRONTEND=noninteractive \
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 \
ASAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer \
MSAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer \
TSAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer \
UBSAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer \
CC=/usr/local/bin/clang \
GCOV=/dev/null \
LD_LIBRARY_PATH=/usr/local/lib \
LC_ALL=C.UTF-8 \

What did you do?

Tried to compile this specific package with Go 1.24 https://github.com/xiam/s-expr/tree/master/parser.
This is instrumented via Bazel's rules_go, but the failed command was

compilepkg: WORK=/tmp/rules_go_work-248807356
PATH=/usr/bin:/bin \
HOSTNAME=localhost \
CGO_ENABLED=1 \
GOARCH=amd64 \
GODEBUG=winsymlink=0 \
GOEXPERIMENT=nocoverageredesign \
GOOS=linux \
GOPATH= \
GOROOT_FINAL=GOROOT \
GOTOOLCHAIN=local \
DEBIAN_FRONTEND=noninteractive \
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 \
ASAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer \
MSAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer \
TSAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer \
UBSAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer \
CC=/usr/local/bin/clang \
GCOV=/dev/null \
LD_LIBRARY_PATH=/usr/local/lib \
LC_ALL=C.UTF-8 \
LANGUAGE=C.UTF-8 \
LANG=C.UTF-8 \
HOME=/root \
GOROOT=bazel-out/platform_linux_x86_64-fastbuild/bin/external/io_bazel_rules_go/stdlib_ \
external/go_sdk_linux/pkg/tool/linux_amd64/compile -p github.com/xiam/s-expr/parser -importcfg /tmp/rules_go_work-248807356/importcfg1337994154 -pack -trimpath=/buildbuddy-execroot -o /buildbuddy-execroot/bazel-out/platform_linux_x86_64-fastbuild/bin/external/com_github_xiam_s_expr/parser/parser.x -linkobj /buildbuddy-execroot/bazel-out/platform_linux_x86_64-fastbuild/bin/external/com_github_xiam_s_expr/parser/parser.a -- /buildbuddy-execroot/external/com_github_xiam_s_expr/parser/errors.go /buildbuddy-execroot/external/com_github_xiam_s_expr/parser/options.go /buildbuddy-execroot/external/com_github_xiam_s_expr/parser/parser.go
compilepkg: error running subcommand external/go_sdk_linux/pkg/tool/linux_amd64/compile: signal: killed

What did you see happen?

The compilation timeout in our CI setup.
Memory consumption of the sandbox keep increasing overtime.

What did you expect to see?

The package was able to compile normally on 1.23.6.

@gopherbot gopherbot added the compiler/runtime Issues related to the Go compiler and/or runtime. label Feb 12, 2025
@egonelbre
Copy link
Contributor

egonelbre commented Feb 12, 2025

Stack trace for the stuck state: stack-trace.log

Culprit goroutine seems to be this:

goroutine 1 gp=0xc000002380 m=nil [runnable]:
sync.(*Pool).Put(0x15d7900?, {0xe87c60?, 0xc000153040?})
	sync/pool.go:99 +0x26c fp=0xc0004b2f38 sp=0xc0004b2f30 pc=0x4a01cc
fmt.(*pp).free(...)
	fmt/print.go:181
fmt.Sprintf({0xea6ddb, 0x6}, {0xc0004b30e0, 0x3, 0x3})
	fmt/print.go:241 +0xc2e fp=0xc0004b3038 sp=0xc0004b2f38 pc=0x51006e
cmd/compile/internal/ir.closureName(0xe5d000?, {0xbae060?, 0xc0?}, 0x24)
	cmd/compile/internal/ir/func.go:483 +0x385 fp=0xc0004b3140 sp=0xc0004b3038 pc=0x61bb85
cmd/compile/internal/ir.NewClosureFunc({0x2?, 0x0?}, {0xbae060?, 0xc0?}, 0x24, 0xc000bae060, 0xc000729540, 0xc00015e240)
	cmd/compile/internal/ir/func.go:506 +0x8b fp=0xc0004b31b0 sp=0xc0004b3140 pc=0x61be8b
cmd/compile/internal/noder.(*reader).inlClosureFunc(0xc0006837c0?, {0x0?, 0x0?}, 0xc000bae060, 0x24)
	cmd/compile/internal/noder/reader.go:3095 +0x65 fp=0xc0004b3200 sp=0xc0004b31b0 pc=0xd28e45
cmd/compile/internal/noder.(*reader).funcLit(0xc0006837c0)
	cmd/compile/internal/noder/reader.go:3067 +0x8e fp=0xc0004b3250 sp=0xc0004b3200 pc=0xd28cce
cmd/compile/internal/noder.(*reader).expr(0xc0006837c0)
	cmd/compile/internal/noder/reader.go:2147 +0x354 fp=0xc0004b37a0 sp=0xc0004b3250 pc=0xd22214
cmd/compile/internal/noder.(*reader).expr(0xc0006837c0)
	cmd/compile/internal/noder/reader.go:2448 +0x26fa fp=0xc0004b3cf0 sp=0xc0004b37a0 pc=0xd245ba
cmd/compile/internal/noder.(*reader).expr(0xc0006837c0)
	cmd/compile/internal/noder/reader.go:2488 +0x1e6d fp=0xc0004b4240 sp=0xc0004b3cf0 pc=0xd23d2d
cmd/compile/internal/noder.(*reader).multiExpr(...)
	cmd/compile/internal/noder/reader.go:2968
cmd/compile/internal/noder.(*reader).stmt1(0xc0006837c0, 0x482585?, 0xc0004b44b0)
	cmd/compile/internal/noder/reader.go:1762 +0xa6a fp=0xc0004b4470 sp=0xc0004b4240 pc=0xd1ebea
cmd/compile/internal/noder.(*reader).stmts(0xc0006837c0)
	cmd/compile/internal/noder/reader.go:1666 +0xa5 fp=0xc0004b44f0 sp=0xc0004b4470 pc=0xd1e085
cmd/compile/internal/noder.unifiedInlineCall.func1()
	cmd/compile/internal/noder/reader.go:3535 +0x8f fp=0xc0004b4558 sp=0xc0004b44f0 pc=0xd2c7cf
cmd/compile/internal/ir.WithFunc(0xc00090f660?, 0xc000b83e60?)
	cmd/compile/internal/ir/func.go:405 +0x89 fp=0xc0004b4590 sp=0xc0004b4558 pc=0x61b589
cmd/compile/internal/noder.unifiedInlineCall(0xc000729540, 0xc0004c9ae0, 0xc0006e5680, 0x203)
	cmd/compile/internal/noder/reader.go:3531 +0x109b fp=0xc0004b4818 sp=0xc0004b4590 pc=0xd2c19b
cmd/compile/internal/inline.mkinlcall(0xc000729540, 0xc0004c9ae0, 0xc0006e5680, 0x0?, 0x0?)
	cmd/compile/internal/inline/inl.go:1152 +0x5d4 fp=0xc0004b4980 sp=0xc0004b4818 pc=0xb33d94
cmd/compile/internal/inline.TryInlineCall(0xc000729540, 0xc0004c9ae0, 0x0, 0x0, 0x0)
	cmd/compile/internal/inline/inl.go:851 +0x165 fp=0xc0004b49f8 sp=0xc0004b4980 pc=0xb31ca5
cmd/compile/internal/inline/interleaved.(*inlClosureState).edit(0xc000757500, 0xc00096d2d0?)
	cmd/compile/internal/inline/interleaved/interleaved.go:229 +0x7e fp=0xc0004b4a38 sp=0xc0004b49f8 pc=0xc3ce7e
cmd/compile/internal/gc.Main.DevirtualizeAndInlinePackage.func2.1()
	cmd/compile/internal/inline/interleaved/interleaved.go:105 +0x94 fp=0xc0004b4aa8 sp=0xc0004b4a38 pc=0xd6d3f4
cmd/compile/internal/ir.WithFunc(0xe1b1e0?, 0xc0006f0b40?)
	cmd/compile/internal/ir/func.go:405 +0x89 fp=0xc0004b4ae0 sp=0xc0004b4aa8 pc=0x61b589
cmd/compile/internal/gc.Main.DevirtualizeAndInlinePackage.func2({0xc00075f298, 0x8, 0xc0006dd040?}, 0x13?)
	cmd/compile/internal/inline/interleaved/interleaved.go:93 +0x189 fp=0xc0004b4b50 sp=0xc0004b4ae0 pc=0xd6d2e9
cmd/compile/internal/ir.(*bottomUpVisitor).visit(0xc0006f1260, 0xc0006dd040)
	cmd/compile/internal/ir/scc.go:121 +0x364 fp=0xc0004b4bd8 sp=0xc0004b4b50 pc=0x63f864
cmd/compile/internal/ir.(*bottomUpVisitor).visit.func1({0x1034e88?, 0xc0006dd040?})
	cmd/compile/internal/ir/scc.go:78 +0x3b fp=0xc0004b4c08 sp=0xc0004b4bd8 pc=0x63fabb
cmd/compile/internal/ir.(*bottomUpVisitor).visit.func2({0x1034f50, 0xc0006d6a50})
	cmd/compile/internal/ir/scc.go:88 +0x72 fp=0xc0004b4c38 sp=0xc0004b4c08 pc=0x63f9b2
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1034f50, 0xc0006d6a50})
	cmd/compile/internal/ir/visit.go:117 +0x2a fp=0xc0004b4c68 sp=0xc0004b4c38 pc=0x63f8ea
cmd/compile/internal/ir.(*CallExpr).doChildren(0xc000737360, 0xc0007612c0)
	cmd/compile/internal/ir/node_gen.go:394 +0xb7 fp=0xc0004b4ca8 sp=0xc0004b4c68 pc=0x6252f7
cmd/compile/internal/ir.DoChildren({0x1035270?, 0xc000737360?}, 0x1034f50?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b4ce0 sp=0xc0004b4ca8 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1035270, 0xc000737360})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b4d10 sp=0xc0004b4ce0 pc=0x63f905
cmd/compile/internal/ir.(*ParenExpr).doChildren(0xc000762910, 0xc0007612c0)
	cmd/compile/internal/ir/node_gen.go:1527 +0xb7 fp=0xc0004b4d40 sp=0xc0004b4d10 pc=0x6341f7
cmd/compile/internal/ir.DoChildren({0x1037408?, 0xc000762910?}, 0xc0008b8380?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b4d78 sp=0xc0004b4d40 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1037408, 0xc000762910})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b4da8 sp=0xc0004b4d78 pc=0x63f905
cmd/compile/internal/ir.(*AssignStmt).doChildren(...)
	cmd/compile/internal/ir/node_gen.go:207
cmd/compile/internal/ir.DoChildren({0x10365f8?, 0xc000745d60?}, 0xc0007612c0)
	cmd/compile/internal/ir/visit.go:94 +0x11e fp=0xc0004b4de0 sp=0xc0004b4da8 pc=0x64125e
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x10365f8, 0xc000745d60})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b4e10 sp=0xc0004b4de0 pc=0x63f905
cmd/compile/internal/ir.doNodes(...)
	cmd/compile/internal/ir/node_gen.go:2433
cmd/compile/internal/ir.(*CallExpr).doChildren(0xc000737400, 0xc0007612c0)
	cmd/compile/internal/ir/node_gen.go:391 +0x74 fp=0xc0004b4e50 sp=0xc0004b4e10 pc=0x6252b4
cmd/compile/internal/ir.DoChildren({0x1035270?, 0xc000737400?}, 0x1034f50?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b4e88 sp=0xc0004b4e50 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1035270, 0xc000737400})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b4eb8 sp=0xc0004b4e88 pc=0x63f905
cmd/compile/internal/ir.(*ParenExpr).doChildren(0xc000762960, 0xc0007612c0)
	cmd/compile/internal/ir/node_gen.go:1527 +0xb7 fp=0xc0004b4ee8 sp=0xc0004b4eb8 pc=0x6341f7
cmd/compile/internal/ir.DoChildren({0x1037408?, 0xc000762960?}, 0xc0005e0f68?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b4f20 sp=0xc0004b4ee8 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1037408, 0xc000762960})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b4f50 sp=0xc0004b4f20 pc=0x63f905
cmd/compile/internal/ir.(*AssignStmt).doChildren(...)
	cmd/compile/internal/ir/node_gen.go:207
cmd/compile/internal/ir.DoChildren({0x10365f8?, 0xc000745db0?}, 0xc0007612c0)
	cmd/compile/internal/ir/visit.go:94 +0x11e fp=0xc0004b4f88 sp=0xc0004b4f50 pc=0x64125e
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x10365f8, 0xc000745db0})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b4fb8 sp=0xc0004b4f88 pc=0x63f905
cmd/compile/internal/ir.doNodes(...)
	cmd/compile/internal/ir/node_gen.go:2433
cmd/compile/internal/ir.(*IfStmt).doChildren(0xc00073c850, 0xc0007612c0)
	cmd/compile/internal/ir/node_gen.go:1008 +0x5a fp=0xc0004b4fe8 sp=0xc0004b4fb8 pc=0x62d4ba
cmd/compile/internal/ir.DoChildren({0x10366c0?, 0xc00073c850?}, 0xc0007612c0?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b5020 sp=0xc0004b4fe8 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x10366c0, 0xc00073c850})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b5050 sp=0xc0004b5020 pc=0x63f905
cmd/compile/internal/ir.doNodes(...)
	cmd/compile/internal/ir/node_gen.go:2433
cmd/compile/internal/ir.(*CaseClause).doChildren(0xc000717280, 0xc0007612c0)
	cmd/compile/internal/ir/node_gen.go:477 +0x1f1 fp=0xc0004b5080 sp=0xc0004b5050 pc=0x626571
cmd/compile/internal/ir.DoChildren({0x10370e8?, 0xc000717280?}, 0xc0007612c0?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b50b8 sp=0xc0004b5080 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x10370e8, 0xc000717280})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b50e8 sp=0xc0004b50b8 pc=0x63f905
cmd/compile/internal/ir.doCaseClauses(...)
	cmd/compile/internal/ir/node_gen.go:2361
cmd/compile/internal/ir.(*SwitchStmt).doChildren(0xc00073c8c0, 0xc0007612c0)
	cmd/compile/internal/ir/node_gen.go:2138 +0x12c fp=0xc0004b5128 sp=0xc0004b50e8 pc=0x63bcec
cmd/compile/internal/ir.DoChildren({0x1036850?, 0xc00073c8c0?}, 0xc0007612c0?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b5160 sp=0xc0004b5128 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1036850, 0xc00073c8c0})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b5190 sp=0xc0004b5160 pc=0x63f905
cmd/compile/internal/ir.doNodes(...)
	cmd/compile/internal/ir/node_gen.go:2433
cmd/compile/internal/ir.(*Func).doChildren(0x63f96e?, 0xc0007612c0)
	cmd/compile/internal/ir/func.go:194 +0x4e fp=0xc0004b51c0 sp=0xc0004b5190 pc=0x61a88e
cmd/compile/internal/ir.DoChildren({0x1034e88?, 0xc0006dac80?}, 0xe4f820?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b51f8 sp=0xc0004b51c0 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1034e88, 0xc0006dac80})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b5228 sp=0xc0004b51f8 pc=0x63f905
cmd/compile/internal/ir.Visit(...)
	cmd/compile/internal/ir/visit.go:120
cmd/compile/internal/ir.(*bottomUpVisitor).visit(0xc0006f1260, 0xc0006dac80)
	cmd/compile/internal/ir/scc.go:84 +0x248 fp=0xc0004b52b0 sp=0xc0004b5228 pc=0x63f748
cmd/compile/internal/ir.(*bottomUpVisitor).visit.func1({0x1034e88?, 0xc0006dac80?})
	cmd/compile/internal/ir/scc.go:78 +0x3b fp=0xc0004b52e0 sp=0xc0004b52b0 pc=0x63fabb
cmd/compile/internal/ir.(*bottomUpVisitor).visit.func2({0x1034f50, 0xc0006d6790})
	cmd/compile/internal/ir/scc.go:88 +0x72 fp=0xc0004b5310 sp=0xc0004b52e0 pc=0x63f9b2
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1034f50, 0xc0006d6790})
	cmd/compile/internal/ir/visit.go:117 +0x2a fp=0xc0004b5340 sp=0xc0004b5310 pc=0x63f8ea
cmd/compile/internal/ir.(*CallExpr).doChildren(0xc000737a40, 0xc000761260)
	cmd/compile/internal/ir/node_gen.go:394 +0xb7 fp=0xc0004b5380 sp=0xc0004b5340 pc=0x6252f7
cmd/compile/internal/ir.DoChildren({0x1035270?, 0xc000737a40?}, 0x1034f50?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b53b8 sp=0xc0004b5380 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1035270, 0xc000737a40})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b53e8 sp=0xc0004b53b8 pc=0x63f905
cmd/compile/internal/ir.(*ParenExpr).doChildren(0xc000762640, 0xc000761260)
	cmd/compile/internal/ir/node_gen.go:1527 +0xb7 fp=0xc0004b5418 sp=0xc0004b53e8 pc=0x6341f7
cmd/compile/internal/ir.DoChildren({0x1037408?, 0xc000762640?}, 0xc0005e1498?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b5450 sp=0xc0004b5418 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1037408, 0xc000762640})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b5480 sp=0xc0004b5450 pc=0x63f905
cmd/compile/internal/ir.(*AssignStmt).doChildren(...)
	cmd/compile/internal/ir/node_gen.go:207
cmd/compile/internal/ir.DoChildren({0x10365f8?, 0xc00074d090?}, 0xc000761260)
	cmd/compile/internal/ir/visit.go:94 +0x11e fp=0xc0004b54b8 sp=0xc0004b5480 pc=0x64125e
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x10365f8, 0xc00074d090})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b54e8 sp=0xc0004b54b8 pc=0x63f905
cmd/compile/internal/ir.doNodes(...)
	cmd/compile/internal/ir/node_gen.go:2433
cmd/compile/internal/ir.(*ForStmt).doChildren(0xc00073ccb0, 0xc000761260)
	cmd/compile/internal/ir/node_gen.go:873 +0x74 fp=0xc0004b5518 sp=0xc0004b54e8 pc=0x62b734
cmd/compile/internal/ir.DoChildren({0x1036788?, 0xc00073ccb0?}, 0xc000761260?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b5550 sp=0xc0004b5518 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1036788, 0xc00073ccb0})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b5580 sp=0xc0004b5550 pc=0x63f905
cmd/compile/internal/ir.doNodes(...)
	cmd/compile/internal/ir/node_gen.go:2433
cmd/compile/internal/ir.(*Func).doChildren(0x63f96e?, 0xc000761260)
	cmd/compile/internal/ir/func.go:194 +0x4e fp=0xc0004b55b0 sp=0xc0004b5580 pc=0x61a88e
cmd/compile/internal/ir.DoChildren({0x1034e88?, 0xc0006d5900?}, 0xe4f820?)
	cmd/compile/internal/ir/visit.go:94 +0x65 fp=0xc0004b55e8 sp=0xc0004b55b0 pc=0x6411a5
cmd/compile/internal/ir.(*bottomUpVisitor).visit.Visit.func3({0x1034e88, 0xc0006d5900})
	cmd/compile/internal/ir/visit.go:118 +0x45 fp=0xc0004b5618 sp=0xc0004b55e8 pc=0x63f905
cmd/compile/internal/ir.Visit(...)
	cmd/compile/internal/ir/visit.go:120
cmd/compile/internal/ir.(*bottomUpVisitor).visit(0xc0006f1260, 0xc0006d5900)
	cmd/compile/internal/ir/scc.go:84 +0x248 fp=0xc0004b56a0 sp=0xc0004b5618 pc=0x63f748
cmd/compile/internal/ir.VisitFuncsBottomUp({0xc0005e2c00, 0x24, 0xc0007548c0?}, 0xc00076f550)
	cmd/compile/internal/ir/scc.go:58 +0xb8 fp=0xc0004b56d0 sp=0xc0004b56a0 pc=0x63f478
cmd/compile/internal/inline/interleaved.DevirtualizeAndInlinePackage(...)
	cmd/compile/internal/inline/interleaved/interleaved.go:65
cmd/compile/internal/gc.Main(0xeeb7e8)
	cmd/compile/internal/gc/main.go:240 +0x1345 fp=0xc0004b5ef0 sp=0xc0004b56d0 pc=0xd6b5c5
main.main()
	cmd/compile/main.go:57 +0xf9 fp=0xc0004b5f50 sp=0xc0004b5ef0 pc=0xd97739
runtime.main()
	runtime/proc.go:283 +0x28b fp=0xc0004b5fe0 sp=0xc0004b5f50 pc=0x44be0b
runtime.goexit({})
	runtime/asm_amd64.s:1700 +0x1 fp=0xc0004b5fe8 sp=0xc0004b5fe0 pc=0x48c921

@Jorropo Jorropo added NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. BugReport Issues describing a possible bug in the Go implementation. labels Feb 12, 2025
@egonelbre
Copy link
Contributor

egonelbre commented Feb 12, 2025

Looks like it's somehow related to the recursive functions inside a closure, such as https://github.com/xiam/s-expr/blob/9d7e25c9d7d12b8b82f98b26ca28a52c97330acf/parser/parser.go#L122

By replacing all of them with a struct + method the problem went away. e.g.

type parserErrorState struct{ err error }
func (s parserErrorState) Do(p *Parser) parserState {

@prattmic
Copy link
Member

cc @golang/compiler

@egonelbre
Copy link
Contributor

egonelbre commented Feb 12, 2025

I bisected the issue to https://go-review.googlesource.com/c/go/+/630696 change. CC @dr2chase

@dmitshur dmitshur added this to the Go1.25 milestone Feb 12, 2025
@dmitshur dmitshur added the Critical A critical problem that affects the availability or correctness of production systems built using Go label Feb 12, 2025
@egonelbre
Copy link
Contributor

And here's a tiny repro:

package repro

type Parser struct{}
type Node struct{}

type parserState func(p *Parser) parserState

func parserStateData(root *Node) parserState {
	return func(p *Parser) parserState {
		return parserStateOpenMap(root)(p)
	}
}

func parserStateOpenMap(root *Node) parserState {
	return func(p *Parser) parserState {
		return parserStateData(root)(p)
	}
}

@randall77
Copy link
Contributor

Thanks for the small repro.
Definitely looks like an infinite inlining in a recursive case. The detector that ensures we don't get into an infinite inlining loop isn't working.

// Check if we've already inlined this function at this particular

The names of the things in the inlining tree get really big really quickly, so I'm not surprised deeper names don't match the ones higher in the tree.

@dr2chase Any ideas? I can keep poking if it isn't something obvious.

@gopherbot
Copy link
Contributor

Change https://go.dev/cl/649656 mentions this issue: cmd/compile: avoid infinite recursion when inlining closures

@gopherbot
Copy link
Contributor

Change https://go.dev/cl/649855 mentions this issue: cmd/compile: proposed edit to Cuong's parent CL

@sluongng
Copy link
Author

It goes without saying but we should backport the fix to 1.24.1 right?

@randall77
Copy link
Contributor

@sluongng Seems likely. Let's agree on what the fix looks like first.

@dmitshur dmitshur added NeedsFix The path to resolution is known, but the work has not been done. and removed NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. labels Feb 18, 2025
@dmitshur dmitshur moved this to All-But-Submitted in Go Compiler / Runtime Feb 18, 2025
@github-project-automation github-project-automation bot moved this from All-But-Submitted to Done in Go Compiler / Runtime Feb 19, 2025
@cuonglm
Copy link
Member

cuonglm commented Feb 19, 2025

@gopherbot please backport this to go1.24 release.

This issue cause the compiler hangs for normal/existed users code.

@gopherbot
Copy link
Contributor

Backport issue(s) opened: #71829 (for 1.24).

Remember to create the cherry-pick CL(s) as soon as the patch is submitted to master, according to https://go.dev/wiki/MinorReleases.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BugReport Issues describing a possible bug in the Go implementation. compiler/runtime Issues related to the Go compiler and/or runtime. Critical A critical problem that affects the availability or correctness of production systems built using Go NeedsFix The path to resolution is known, but the work has not been done.
Projects
Development

No branches or pull requests

9 participants