From: Cuong Manh Le Date: Fri, 25 Aug 2023 08:08:05 +0000 (+0700) Subject: cmd/compile: un-hide closure func in init function X-Git-Tag: go1.22rc1~1081 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=079c0441d548494fd23ec0083b6f22fb128ea52d;p=gostls13.git cmd/compile: un-hide closure func in init function Same as CL 492135, but for init function. Fixes #62277 Change-Id: If5ff9bc2ce2a73193b1f7ee5f7f14045d1354f56 Reviewed-on: https://go-review.googlesource.com/c/go/+/522956 Run-TryBot: Cuong Manh Le Reviewed-by: Matthew Dempsky Reviewed-by: Bryan Mills TryBot-Result: Gopher Robot Auto-Submit: Cuong Manh Le --- diff --git a/src/cmd/cgo/internal/testshared/shared_test.go b/src/cmd/cgo/internal/testshared/shared_test.go index 2eab33f919..814b9994f8 100644 --- a/src/cmd/cgo/internal/testshared/shared_test.go +++ b/src/cmd/cgo/internal/testshared/shared_test.go @@ -1159,6 +1159,12 @@ func TestIssue47873(t *testing.T) { goCmd(t, "run", "-linkshared", "./issue47837/main") } +func TestIssue62277(t *testing.T) { + globalSkip(t) + goCmd(t, "install", "-buildmode=shared", "-linkshared", "./issue62277/p") + goCmd(t, "test", "-linkshared", "./issue62277") +} + // Test that we can build std in shared mode. func TestStd(t *testing.T) { if testing.Short() { diff --git a/src/cmd/cgo/internal/testshared/testdata/issue62277/issue62277_test.go b/src/cmd/cgo/internal/testshared/testdata/issue62277/issue62277_test.go new file mode 100644 index 0000000000..89a0601c9b --- /dev/null +++ b/src/cmd/cgo/internal/testshared/testdata/issue62277/issue62277_test.go @@ -0,0 +1,16 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package issue62277_test + +import ( + "testing" + + "testshared/issue62277/p" +) + +func TestIssue62277(t *testing.T) { + t.Log(p.S) + t.Log(p.T) +} diff --git a/src/cmd/cgo/internal/testshared/testdata/issue62277/p/p.go b/src/cmd/cgo/internal/testshared/testdata/issue62277/p/p.go new file mode 100644 index 0000000000..97bde0c10f --- /dev/null +++ b/src/cmd/cgo/internal/testshared/testdata/issue62277/p/p.go @@ -0,0 +1,17 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +var S = func() []string { + return []string{"LD_LIBRARY_PATH"} +}() + +var T []string + +func init() { + T = func() []string { + return []string{"LD_LIBRARY_PATH"} + }() +} diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index 01f001f199..374d9225b9 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -3109,6 +3109,11 @@ func (r *reader) funcLit() ir.Node { r.addBody(fn, nil) + // un-hide closures belong to init function. + if (r.curfn.IsPackageInit() || strings.HasPrefix(r.curfn.Sym().Name, "init.")) && ir.IsTrivialClosure(fn.OClosure) { + fn.SetIsHiddenClosure(false) + } + return fn.OClosure }