mirror of
https://github.com/burrowers/garble.git
synced 2025-09-26 20:01:16 +08:00
support testing/synctest when a non-test package imports "testing" too
As spotted by scripts/check-third-party.sh, it's possible to import the testing package without using `go test`, so our previous solution to only load testing/synctest when running `go test` was not enough. Add a regression test via stdimporter in gogarble.txtar.
This commit is contained in:
@@ -87,8 +87,10 @@ var runtimeAndLinknamed = []string{
|
||||
"unique", // go1.25
|
||||
"weak", // go1.25
|
||||
// The net package linknames to the runtime, not the other way around.
|
||||
// TODO: support this automatically via our script.
|
||||
"net",
|
||||
// The testing package uses a //go:linkname directive pointing to testing/synctest,
|
||||
// but it doesn't import the package, presumably to avoid an import cycle.
|
||||
"testing/synctest",
|
||||
}
|
||||
|
||||
var compilerIntrinsics = map[string]map[string]bool{
|
||||
|
@@ -53,8 +53,10 @@ var runtimeAndLinknamed = []string{
|
||||
"{{ $path.String }}", // {{ $path.GoVersionLang }}
|
||||
{{- end }}
|
||||
// The net package linknames to the runtime, not the other way around.
|
||||
// TODO: support this automatically via our script.
|
||||
"net",
|
||||
// The testing package uses a //go:linkname directive pointing to testing/synctest,
|
||||
// but it doesn't import the package, presumably to avoid an import cycle.
|
||||
"testing/synctest",
|
||||
}
|
||||
|
||||
var compilerIntrinsics = map[string]map[string]bool{
|
||||
|
11
shared.go
11
shared.go
@@ -279,23 +279,12 @@ func appendListedPackages(packages []string, mainBuild bool) error {
|
||||
// Similar flags to what go/packages uses.
|
||||
"-json", "-export", "-compiled", "-e",
|
||||
}
|
||||
if len(packages) == 0 {
|
||||
// As we may append to the packages slice below,
|
||||
// ensure that zero packages still means "the current directory".
|
||||
packages = append(packages, ".")
|
||||
}
|
||||
if mainBuild {
|
||||
// When loading the top-level packages we are building,
|
||||
// we want to transitively load all their dependencies as well.
|
||||
// That is not the case when loading standard library packages,
|
||||
// as runtimeAndLinknamed already contains transitive dependencies.
|
||||
args = append(args, "-deps")
|
||||
if slices.Contains(sharedCache.ForwardBuildFlags, "-test") {
|
||||
// The testing package uses a //go:linkname directive pointing to testing/synctest,
|
||||
// but it doesn't import the package, presumably to avoid an import cycle.
|
||||
// For the linkname to obfuscate correctly, we need to list both when using `go test`.
|
||||
packages = append(packages, "testing/synctest")
|
||||
}
|
||||
}
|
||||
args = append(args, garbleBuildFlags...)
|
||||
args = append(args, sharedCache.ForwardBuildFlags...)
|
||||
|
2
testdata/script/gogarble.txtar
vendored
2
testdata/script/gogarble.txtar
vendored
@@ -91,6 +91,7 @@ import (
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
"syscall"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -107,6 +108,7 @@ func main() {
|
||||
debug.WriteHeapDump(1)
|
||||
time.Now()
|
||||
syscall.Listen(0, 1)
|
||||
testing.MainStart(nil, nil, nil, nil, nil)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user