mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
[dev.typeparams] cmd/compile: skip types2 GC test during bootstrapping
Unified includes a check to make sure that types2 memory has been garbage collected, but it relies on precise finalization, which we provide (for dynamically allocated objects, at least) but isn't guaranteed by the Go spec. In particular, Go 1.4 doesn't provide this. The check is strictly unnecessary and only exists to make sure we don't regress and start holding onto types2 memory accidentally. So just disable the check during bootstrap builds. Change-Id: Ie54fe53b2edba02c0b0b1e5ae39d81be8a0ace8d Reviewed-on: https://go-review.googlesource.com/c/go/+/329269 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
fb84d213a8
commit
feec53c4e5
11
src/cmd/compile/internal/base/bootstrap_false.go
Normal file
11
src/cmd/compile/internal/base/bootstrap_false.go
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2021 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.
|
||||||
|
|
||||||
|
// +build !compiler_bootstrap
|
||||||
|
|
||||||
|
package base
|
||||||
|
|
||||||
|
// CompilerBootstrap reports whether the current compiler binary was
|
||||||
|
// built with -tags=compiler_bootstrap.
|
||||||
|
const CompilerBootstrap = false
|
11
src/cmd/compile/internal/base/bootstrap_true.go
Normal file
11
src/cmd/compile/internal/base/bootstrap_true.go
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2021 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.
|
||||||
|
|
||||||
|
// +build compiler_bootstrap
|
||||||
|
|
||||||
|
package base
|
||||||
|
|
||||||
|
// CompilerBootstrap reports whether the current compiler binary was
|
||||||
|
// built with -tags=compiler_bootstrap.
|
||||||
|
const CompilerBootstrap = true
|
|
@ -161,6 +161,16 @@ func writePkgStub(noders []*noder) string {
|
||||||
|
|
||||||
// freePackage ensures the given package is garbage collected.
|
// freePackage ensures the given package is garbage collected.
|
||||||
func freePackage(pkg *types2.Package) {
|
func freePackage(pkg *types2.Package) {
|
||||||
|
// The GC test below relies on a precise GC that runs finalizers as
|
||||||
|
// soon as objects are unreachable. Our implementation provides
|
||||||
|
// this, but other/older implementations may not (e.g., Go 1.4 does
|
||||||
|
// not because of #22350). To avoid imposing unnecessary
|
||||||
|
// restrictions on the GOROOT_BOOTSTRAP toolchain, we skip the test
|
||||||
|
// during bootstrapping.
|
||||||
|
if base.CompilerBootstrap {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Set a finalizer on pkg so we can detect if/when it's collected.
|
// Set a finalizer on pkg so we can detect if/when it's collected.
|
||||||
done := make(chan struct{})
|
done := make(chan struct{})
|
||||||
runtime.SetFinalizer(pkg, func(*types2.Package) { close(done) })
|
runtime.SetFinalizer(pkg, func(*types2.Package) { close(done) })
|
||||||
|
|
Loading…
Reference in a new issue