]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: avoid infinite recursion when inlining closures
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Fri, 14 Feb 2025 20:00:27 +0000 (03:00 +0700)
committerGopher Robot <gobot@golang.org>
Wed, 19 Feb 2025 01:52:51 +0000 (17:52 -0800)
commit34073a736ab87d346399b8eef60d520a8b3cc5d4
tree88d0e4f0af07651695408991ba8c0374a0f0ea07
parenta7489b864879e89182ddf32d4a108c6967aa0522
cmd/compile: avoid infinite recursion when inlining closures

CL 630696 changes budget for once-called closures, making them more
inlinable. However, when recursive inlining involve both the closure and
its parent, the inliner goes into an infinite loop:

parent (a closure)  -> closure -> parent -> ...

The problem here dues to the closure name mangling, causing the inlined
checking condition failed, since the closure name affects how the
linker symbol generated.

To fix this, just prevent the closure from inlining its parent into
itself, avoid the infinite inlining loop.

Fixes #71680

Change-Id: Ib27626d70f95e5f1c24a3eb1c8e6c3443b7d90c8
Reviewed-on: https://go-review.googlesource.com/c/go/+/649656
Reviewed-by: David Chase <drchase@google.com>
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/cmd/compile/internal/inline/inl.go
test/fixedbugs/issue71680.go [new file with mode: 0644]