diff --git a/.github/workflows/goroot.yml b/.github/workflows/goroot.yml index ec9af260da..dc85bcf633 100644 --- a/.github/workflows/goroot.yml +++ b/.github/workflows/goroot.yml @@ -20,6 +20,7 @@ jobs: env: GOPROXY: https://proxy.golang.org,direct LLGO_GOROOT_HEARTBEAT_SECONDS: "60" + LLGO_GOROOT_GOMAXPROCS: "1" LLGO_GOROOT_VERBOSE: "1" strategy: fail-fast: false @@ -123,7 +124,7 @@ jobs: echo '|---:|---:|---:|---:|---:|' echo "| $selected | $observed | $passed | $failed | $skipped |" echo - echo '_Passed means the runner classification succeeded; expected xfail/not-applicable failures and classified flakes are counted as Passed._' + echo '_Passed means the runner classification succeeded; expected xfail failures and classified not-applicable/flake outcomes are counted as Passed._' echo echo '**Failed case paths**' if [[ "$failed" -eq 0 ]]; then @@ -211,7 +212,7 @@ jobs: write_row 'Linux ยท Go 1.26.5' linux/amd64 1.26.5 4 write_row '**Linux total**' linux/amd64 '' 8 echo - echo '_Passed means the runner classification succeeded; expected xfail/not-applicable failures and classified flakes are counted as Passed._' + echo '_Passed means the runner classification succeeded; expected xfail failures and classified not-applicable/flake outcomes are counted as Passed._' echo echo '### Failed case paths' if [[ -s "$failure_tsv" ]]; then diff --git a/runtime/internal/lib/runtime/pprof_runtime_stub_llgo.go b/runtime/internal/lib/runtime/pprof_runtime_stub_llgo.go index a5ac9a4b2c..16bfd69be9 100644 --- a/runtime/internal/lib/runtime/pprof_runtime_stub_llgo.go +++ b/runtime/internal/lib/runtime/pprof_runtime_stub_llgo.go @@ -94,7 +94,7 @@ func ThreadCreateProfile(p []StackRecord) (n int, ok bool) { } func NumGoroutine() int { - return 1 + return llrt.NumGoroutine() } const funcForPCCacheSets = 1024 diff --git a/runtime/internal/lib/runtime/sync_runtime_llgo.go b/runtime/internal/lib/runtime/sync_runtime_llgo.go index 5960b27c60..63de7b156d 100644 --- a/runtime/internal/lib/runtime/sync_runtime_llgo.go +++ b/runtime/internal/lib/runtime/sync_runtime_llgo.go @@ -2,48 +2,11 @@ package runtime -import ( - _ "sync/atomic" - _ "unsafe" - - psync "github.com/xgo-dev/llgo/runtime/internal/clite/pthread/sync" -) +import _ "unsafe" var poolCleanup func() -var procPinOnce psync.Once -var procPinMu psync.Mutex - -func initProcPinMu() { - procPinMu.Init(nil) -} //go:linkname sync_runtime_registerPoolCleanup sync.runtime_registerPoolCleanup func sync_runtime_registerPoolCleanup(cleanup func()) { poolCleanup = cleanup } - -//go:linkname sync_runtime_procPin sync.runtime_procPin -func sync_runtime_procPin() int { - procPinOnce.Do(initProcPinMu) - procPinMu.Lock() - return 0 -} - -//go:linkname sync_runtime_procUnpin sync.runtime_procUnpin -func sync_runtime_procUnpin() { - procPinMu.Unlock() -} - -// sync/atomic.Value expects these package-local runtime hooks. On darwin and -// linux, LLGo serializes every procPin region with one process-wide mutex -// because it cannot pin an OS-thread goroutine to a Go P. -// -//go:linkname atomic_runtime_procPin sync/atomic.runtime_procPin -func atomic_runtime_procPin() int { - return sync_runtime_procPin() -} - -//go:linkname atomic_runtime_procUnpin sync/atomic.runtime_procUnpin -func atomic_runtime_procUnpin() { - sync_runtime_procUnpin() -} diff --git a/runtime/internal/runtime/proc.go b/runtime/internal/runtime/proc.go index 7329da2a81..ca21e7abcb 100644 --- a/runtime/internal/runtime/proc.go +++ b/runtime/internal/runtime/proc.go @@ -214,3 +214,11 @@ func GMPForTesting() (goid, parentGoid uint64, mid int64, pid int32, gstatus, ps func GStateForTesting() (count uint64, mainExited bool) { return gStateForTesting() } + +// NumGoroutine returns the number of live runtime contexts. Calling getg first +// ensures that a lazily initialized main or foreign thread is included. +func NumGoroutine() int { + getg() + count, _ := gStateForTesting() + return int(count) +} diff --git a/runtime/internal/runtime/procpin.go b/runtime/internal/runtime/procpin.go new file mode 100644 index 0000000000..d7789729d1 --- /dev/null +++ b/runtime/internal/runtime/procpin.go @@ -0,0 +1,48 @@ +//go:build darwin || linux + +package runtime + +import ( + _ "unsafe" + + psync "github.com/xgo-dev/llgo/runtime/internal/clite/pthread/sync" +) + +var procPinOnce psync.Once +var procPinMu psync.Mutex + +func initProcPinMu() { + procPinMu.Init(nil) +} + +// LLGo has no Go P to pin a goroutine to. Serialize procPin regions instead, +// preserving the exclusion that sync.Pool and sync/atomic.Value require. +func procPin() int { + procPinOnce.Do(initProcPinMu) + procPinMu.Lock() + return 0 +} + +func procUnpin() { + procPinMu.Unlock() +} + +//go:linkname syncRuntimeProcPin sync.runtime_procPin +func syncRuntimeProcPin() int { + return procPin() +} + +//go:linkname syncRuntimeProcUnpin sync.runtime_procUnpin +func syncRuntimeProcUnpin() { + procUnpin() +} + +//go:linkname atomicRuntimeProcPin sync/atomic.runtime_procPin +func atomicRuntimeProcPin() int { + return procPin() +} + +//go:linkname atomicRuntimeProcUnpin sync/atomic.runtime_procUnpin +func atomicRuntimeProcUnpin() { + procUnpin() +} diff --git a/test/go/runtime_g_state_test.go b/test/go/runtime_g_state_test.go index 8d808ac5df..92f684380d 100644 --- a/test/go/runtime_g_state_test.go +++ b/test/go/runtime_g_state_test.go @@ -78,3 +78,28 @@ func TestRuntimeGStateIsolation(t *testing.T) { t.Fatalf("main goroutine recovered %v, want %q", recovered, "main panic") } } + +func TestRuntimeNumGoroutineTracksWorkers(t *testing.T) { + const workerCount = 8 + ready := make(chan struct{}, workerCount) + release := make(chan struct{}) + done := make(chan struct{}, workerCount) + for range workerCount { + go func() { + ready <- struct{}{} + <-release + done <- struct{}{} + }() + } + for range workerCount { + <-ready + } + if got := runtime.NumGoroutine(); got < workerCount+1 { + t.Fatalf("NumGoroutine with %d blocked workers = %d, want at least %d", workerCount, got, workerCount+1) + } + + close(release) + for range workerCount { + <-done + } +} diff --git a/test/goroot/README.md b/test/goroot/README.md index e591d81b7b..d5ca80de34 100644 --- a/test/goroot/README.md +++ b/test/goroot/README.md @@ -23,7 +23,9 @@ behavior are classified separately through `notapplicable.yaml`, so the xfail count continues to represent remaining LLGo compatibility work. Only explicitly host-unsafe cases are skipped. Each not-applicable entry documents both the toolchain-specific mechanism under test and why the corresponding -behavior is not an LLGo compatibility goal. +behavior is not an LLGo compatibility goal. Not-applicable classification is +global rather than version- or platform-specific, and both successful and +failed execution are accepted; resource-guard failures remain fatal. Basic usage: diff --git a/test/goroot/notapplicable.yaml b/test/goroot/notapplicable.yaml index 21e74bcda1..11dfaffe84 100644 --- a/test/goroot/notapplicable.yaml +++ b/test/goroot/notapplicable.yaml @@ -514,6 +514,9 @@ not_applicable: directive: run case: maymorestack.go reason: "not applicable: LLGo uses fixed native stacks, so gc's growable-stack maymorestack debug hook has no corresponding behavior; supporting this toolchain-specific behavior is not an LLGo compatibility goal" + - directive: run + case: stack.go + reason: "not applicable: this case recursively grows through 8,000 large frames to validate cmd/compile's stack-splitting implementation; LLGo maps each goroutine to a native OS thread with a fixed stack, so reproducing Go's growable-stack mechanism is not currently an LLGo compatibility goal" - version: go1.26 directive: errorcheckandrundir case: intrinsic.go diff --git a/test/goroot/runner_test.go b/test/goroot/runner_test.go index 8f32cfb6e8..61a431d8a3 100644 --- a/test/goroot/runner_test.go +++ b/test/goroot/runner_test.go @@ -357,7 +357,7 @@ func TestGoRootRunCases(t *testing.T) { } switch { case err == nil && notApply: - t.Fatalf("unexpected success for not-applicable case: %s", notApplyReason) + t.Logf("not-applicable case passed: %s", notApplyReason) case err == nil && match: t.Fatalf("unexpected success for xfail case: %s", reason) case err == nil && flaky: @@ -378,7 +378,8 @@ func TestGoRootRunCases(t *testing.T) { func writeStdlibImportCfg(t *testing.T, goCmd string) string { t.Helper() cmd := exec.Command(goCmd, "list", "-export", "-f", "{{if .Export}}packagefile {{.ImportPath}}={{.Export}}{{end}}", "std") - cmd.Env = append(os.Environ(), "GOENV=off", "GOFLAGS=") + cmd.Dir = t.TempDir() + cmd.Env = baselineGoEnv() output, err := cmd.CombinedOutput() if err != nil { t.Fatalf("list stdlib exports with %s: %v\n%s", goCmd, err, output) @@ -406,7 +407,7 @@ func repoRoot(t *testing.T) string { func loadToolchainEnv(t *testing.T, goCmd string) toolchainEnv { t.Helper() cmd := exec.Command(goCmd, "env", "-json", "GOOS", "GOARCH", "GOVERSION", "CGO_ENABLED") - cmd.Env = append(os.Environ(), "GOENV=off", "GOFLAGS=") + cmd.Env = baselineGoEnv() var stdout bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &stdout @@ -786,6 +787,8 @@ func runnerEnv(repoRoot, goroot, gopath string, extra []string) []string { env[i] = "GOENV=off" case strings.HasPrefix(item, "GOFLAGS="): env[i] = "GOFLAGS=" + case strings.HasPrefix(item, "GOTOOLCHAIN="): + env[i] = "GOTOOLCHAIN=local" case strings.HasPrefix(item, "LLGO_ROOT="): env[i] = "LLGO_ROOT=" + repoRoot case strings.HasPrefix(item, "GOPATH="): @@ -803,6 +806,7 @@ func runnerEnv(repoRoot, goroot, gopath string, extra []string) []string { env = appendIfMissing(env, "GOROOT="+goroot) env = appendIfMissing(env, "GOENV=off") env = appendIfMissing(env, "GOFLAGS=") + env = appendIfMissing(env, "GOTOOLCHAIN=local") env = appendIfMissing(env, "LLGO_ROOT="+repoRoot) env = appendIfMissing(env, "GOPATH="+gopath) env = appendIfMissing(env, "GO111MODULE=off") @@ -812,6 +816,13 @@ func runnerEnv(repoRoot, goroot, gopath string, extra []string) []string { return env } +func baselineGoEnv() []string { + env := append([]string{}, os.Environ()...) + env = upsertEnv(env, "GOENV=off") + env = upsertEnv(env, "GOFLAGS=") + return upsertEnv(env, "GOTOOLCHAIN=local") +} + func appendIfMissing(env []string, kv string) []string { key := strings.SplitN(kv, "=", 2)[0] + "=" for _, item := range env { @@ -2066,7 +2077,20 @@ func (cfg xfailConfig) Match(goVersion, platform string, tc testCase) (bool, str } func (cfg notApplicableConfig) Match(goVersion, platform string, tc testCase) (bool, string) { - return matchEntries(cfg.Entries, goVersion, platform, tc) + for _, entry := range cfg.Entries { + // Applicability is an LLGo design property, not an observation tied to + // one hosted platform or Go release. Keep accepting legacy selectors in + // the YAML, but intentionally do not use them when classifying a case. + if !matchEntry("", "", entry.Directive, entry.Case, goVersion, platform, tc) { + continue + } + reason := entry.Reason + if reason == "" { + reason = entry.Case + } + return true, reason + } + return false, "" } func (cfg xfailConfig) MatchFlaky(goVersion, platform string, tc testCase) (bool, string) { diff --git a/test/goroot/runner_unit_test.go b/test/goroot/runner_unit_test.go index b99b654fed..43e1aaaa65 100644 --- a/test/goroot/runner_unit_test.go +++ b/test/goroot/runner_unit_test.go @@ -82,6 +82,58 @@ func TestReleaseTagsFor(t *testing.T) { } } +func TestWriteStdlibImportCfgIgnoresRepositoryModule(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("fake go tool uses a shell script") + } + dir := t.TempDir() + logPath := filepath.Join(dir, "pwd.log") + goTool := filepath.Join(dir, "go") + script := fmt.Sprintf("#!/bin/sh\npwd > %q\nprintf 'packagefile runtime=/tmp/runtime.a\\n'\n", logPath) + if err := os.WriteFile(goTool, []byte(script), 0o755); err != nil { + t.Fatal(err) + } + + configPath := writeStdlibImportCfg(t, goTool) + config, err := os.ReadFile(configPath) + if err != nil { + t.Fatal(err) + } + if got, want := string(config), "packagefile runtime=/tmp/runtime.a\n"; got != want { + t.Fatalf("import config=%q, want %q", got, want) + } + commandDir, err := os.ReadFile(logPath) + if err != nil { + t.Fatal(err) + } + wd, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + if strings.TrimSpace(string(commandDir)) == wd { + t.Fatalf("go list std ran inside repository package directory %q", wd) + } +} + +func TestBaselineEnvironmentsForceLocalToolchain(t *testing.T) { + t.Setenv("GOTOOLCHAIN", "auto") + for name, env := range map[string][]string{ + "direct": baselineGoEnv(), + "runner": runnerEnv("/repo", "/goroot", "/gopath", nil), + } { + values := make(map[string]string) + for _, item := range env { + key, value, ok := strings.Cut(item, "=") + if ok { + values[key] = value + } + } + if got := values["GOTOOLCHAIN"]; got != "local" { + t.Errorf("%s environment GOTOOLCHAIN=%q, want local", name, got) + } + } +} + func TestXFailMatch(t *testing.T) { cfg := xfailConfig{ Entries: []xfailEntry{{ @@ -112,9 +164,9 @@ func TestNotApplicableMatch(t *testing.T) { }}, } tc := testCase{RelPath: "writebarrier.go", Directive: "errorcheck"} - match, reason := cfg.Match("go1.26.5", "linux/amd64", tc) + match, reason := cfg.Match("go1.25.0", "darwin/arm64", tc) if !match { - t.Fatal("expected not-applicable match") + t.Fatal("expected not-applicable match independent of version and platform") } if reason != "not applicable: this case checks gc write barriers; LLGo uses a collector without those barriers, so reproducing them is not an LLGo compatibility goal" { t.Fatalf("reason=%q, want not-applicable reason", reason) @@ -130,8 +182,6 @@ func TestRepositoryExpectationsAreSeparated(t *testing.T) { } type selector struct { - version string - platform string directive string casePath string } @@ -140,7 +190,7 @@ func TestRepositoryExpectationsAreSeparated(t *testing.T) { if strings.HasPrefix(entry.Reason, "not applicable:") { t.Fatalf("xfail entry %q has a not-applicable reason", entry.Case) } - xfailSelectors[selector{entry.Version, entry.Platform, entry.Directive, entry.Case}] = struct{}{} + xfailSelectors[selector{entry.Directive, entry.Case}] = struct{}{} } for _, entry := range notApplicable.Entries { if !strings.HasPrefix(entry.Reason, "not applicable:") { @@ -152,13 +202,80 @@ func TestRepositoryExpectationsAreSeparated(t *testing.T) { if !strings.Contains(entry.Reason, "compatibility goal") { t.Fatalf("not-applicable entry %q has reason %q without explaining why support is not planned", entry.Case, entry.Reason) } - key := selector{entry.Version, entry.Platform, entry.Directive, entry.Case} + key := selector{entry.Directive, entry.Case} if _, ok := xfailSelectors[key]; ok { t.Fatalf("expectation selector appears in both files: %+v", key) } } } +func TestStackIsGloballyNotApplicable(t *testing.T) { + repo := repoRoot(t) + xfails := loadXFailConfig(t, repo, filepath.Join("test", "goroot", "xfail.yaml")) + notApplicable := loadNotApplicableConfig(t, repo, filepath.Join("test", "goroot", "notapplicable.yaml")) + tc := testCase{RelPath: "stack.go", Directive: "run"} + + for _, target := range []struct { + version string + platform string + }{ + {version: "go1.24.11", platform: "darwin/arm64"}, + {version: "go1.25.0", platform: "linux/amd64"}, + {version: "go1.26.5", platform: "darwin/arm64"}, + } { + if match, _ := notApplicable.Match(target.version, target.platform, tc); !match { + t.Errorf("stack.go did not match not-applicable for %s/%s", target.version, target.platform) + } + if match, reason := xfails.MatchFlaky(target.version, target.platform, tc); match { + t.Errorf("stack.go still matched flake for %s/%s: %s", target.version, target.platform, reason) + } + } +} + +func TestTypeparamChansIsGloballyFlaky(t *testing.T) { + repo := repoRoot(t) + xfails := loadXFailConfig(t, repo, filepath.Join("test", "goroot", "xfail.yaml")) + tc := testCase{RelPath: "typeparam/chans.go", Directive: "run"} + + for _, target := range []struct { + version string + platform string + }{ + {version: "go1.24.11", platform: "darwin/arm64"}, + {version: "go1.25.0", platform: "linux/amd64"}, + {version: "go1.26.5", platform: "darwin/arm64"}, + } { + if match, _ := xfails.MatchFlaky(target.version, target.platform, tc); !match { + t.Errorf("typeparam/chans.go did not match flake for %s/%s", target.version, target.platform) + } + } +} + +func TestChanlinearIsGloballyHostSkipped(t *testing.T) { + repo := repoRoot(t) + xfails := loadXFailConfig(t, repo, filepath.Join("test", "goroot", "xfail.yaml")) + tc := testCase{RelPath: "chanlinear.go", Directive: "run"} + + for _, target := range []struct { + version string + platform string + }{ + {version: "go1.24.11", platform: "darwin/arm64"}, + {version: "go1.25.0", platform: "linux/amd64"}, + {version: "go1.26.5", platform: "darwin/arm64"}, + } { + if match, _ := xfails.MatchHostSkip(target.version, target.platform, tc); !match { + t.Errorf("chanlinear.go did not match host skip for %s/%s", target.version, target.platform) + } + if _, reason, match := xfails.MatchTimeout(target.version, target.platform, tc); match { + t.Errorf("chanlinear.go still matched timeout for %s/%s: %s", target.version, target.platform, reason) + } + if match, reason := xfails.MatchFlaky(target.version, target.platform, tc); match { + t.Errorf("chanlinear.go still matched flake for %s/%s: %s", target.version, target.platform, reason) + } + } +} + func TestFlakyMatch(t *testing.T) { cfg := xfailConfig{ Flakes: []xfailEntry{{ diff --git a/test/goroot/xfail.yaml b/test/goroot/xfail.yaml index ce01c845ef..823cde795e 100644 --- a/test/goroot/xfail.yaml +++ b/test/goroot/xfail.yaml @@ -1,1115 +1,68 @@ host_skips: - - version: go1.24 - platform: darwin/arm64 - directive: run - case: ddd.go - reason: go1.24 goroot run is host-sensitive on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: gcgort.go - reason: go1.24 goroot run is host-sensitive on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue25897b.go - reason: go1.24 goroot run is host-sensitive on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue27695.go - reason: go1.24 goroot run is host-sensitive on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue39541.go - reason: go1.24 goroot run is host-sensitive on darwin/arm64 - - version: go1.24 - platform: linux/amd64 - directive: run - case: fixedbugs/issue39541.go - reason: go1.24 goroot run is host-sensitive on linux/amd64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue16016.go - reason: go1.24 goroot run can exhaust the macOS runner thread limit - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue16016.go - reason: go1.26 goroot run can exhaust the macOS runner thread limit - - version: go1.24 - platform: linux/amd64 - directive: run - case: fixedbugs/issue16016.go - reason: go1.24 goroot run is host-sensitive on linux/amd64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: rangegen.go - reason: go1.24 rangegen runoutput exceeds the darwin/arm64 CI timeout - - version: go1.24 - platform: darwin/arm64 - directive: run - case: chan/goroutines.go - reason: go1.24 goroot run is host-sensitive on darwin/arm64 - - version: go1.24 - platform: linux/amd64 - directive: run - case: chan/goroutines.go - reason: go1.24 goroot run is host-sensitive on linux/amd64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: chan/goroutines.go - reason: go1.26 goroot run can exhaust the macOS runner thread limit - - version: go1.24 - platform: darwin/arm64 - directive: run - case: chanlinear.go - reason: go1.24 goroot run is host-sensitive on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/bug449.go - reason: go1.24 bug449 generated build exceeds the darwin/arm64 hosted runner resource budget - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/bug449.go - reason: go1.26 bug449 generated build exceeds the darwin/arm64 hosted runner resource budget - - version: go1.24 - platform: linux/amd64 - directive: runoutput - case: fixedbugs/bug449.go - reason: go1.24 bug449 generated build exceeds the linux/amd64 hosted runner memory budget - - version: go1.26 - platform: linux/amd64 - directive: runoutput - case: fixedbugs/bug449.go - reason: go1.26 bug449 generated build exceeds the linux/amd64 hosted runner memory budget -timeouts: - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue79186.go - timeout: 90s - reason: the 51.2 million-operation RWMutex stress loop needs load-dependent runtime slack - - version: go1.26 - platform: linux/amd64 - directive: run - case: fixedbugs/issue79186.go - timeout: 90s - reason: the 51.2 million-operation RWMutex stress loop needs load-dependent runtime slack - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue19658.go - timeout: 2m - reason: the test launches 19 nested go run commands and needs load-dependent runtime slack - - version: go1.24 - platform: darwin/arm64 - directive: run - case: abi/uglyfib.go - timeout: 1m - reason: uglyfib runs close to the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: abi/uglyfib.go - timeout: 1m - reason: uglyfib runs close to the default timeout on darwin/arm64 - - version: go1.24 - platform: linux/amd64 - directive: run - case: abi/uglyfib.go - timeout: 1m - reason: uglyfib runs close to the default timeout on loaded linux/amd64 runners - - version: go1.26 - platform: linux/amd64 - directive: run - case: abi/uglyfib.go - timeout: 1m - reason: uglyfib runs close to the default timeout on loaded linux/amd64 runners - - version: go1.26 - platform: linux/amd64 - directive: run - case: chanlinear.go - timeout: 1m - reason: go1.26 chanlinear needs extra runtime slack on loaded linux/amd64 runners - - version: go1.26 - platform: linux/amd64 - directive: runoutput - case: chan/select5.go - timeout: 2m - reason: chan/select5 runoutput generation runs past the 1m timeout on linux/amd64 - - version: go1.24 - platform: linux/amd64 - directive: runoutput - case: mergemul.go - timeout: 1m - reason: mergemul runoutput generation runs past the default timeout on linux/amd64 - - version: go1.26 - platform: linux/amd64 - directive: runoutput - case: mergemul.go - timeout: 2m - reason: mergemul runoutput generation runs past the 1m timeout on linux/amd64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: clearfat.go - timeout: 2m - reason: clearfat runoutput generation runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: rangegen.go - timeout: 20m - reason: rangegen runoutput compiles the generated stress test past 10m on darwin/arm64 CI - - version: go1.24 - platform: darwin/arm64 - directive: run - case: closure.go - timeout: 2m - reason: closure run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: closure2.go - timeout: 1m - reason: closure2 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug225.go - timeout: 2m - reason: bug225 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug230.go - timeout: 2m - reason: bug230 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug452.go - timeout: 2m - reason: bug452 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug454.go - timeout: 2m - reason: bug454 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug456.go - timeout: 2m - reason: bug456 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug461.go - timeout: 2m - reason: bug461 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug473.go - timeout: 2m - reason: bug473 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug483.go - timeout: 2m - reason: bug483 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue10407.go - timeout: 8m - reason: issue10407 runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue10925.go - timeout: 2m - reason: issue10925 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue11286.go - timeout: 2m - reason: issue11286 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue29013a.go - timeout: 2m - reason: issue29013a run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue30956.go - timeout: 2m - reason: issue30956 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue31419.go - timeout: 2m - reason: issue31419 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue43444.go - timeout: 2m - reason: issue43444 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue4353.go - timeout: 2m - reason: issue4353 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue5162.go - timeout: 4m - reason: issue5162 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue51913.go - timeout: 2m - reason: issue51913 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue57309.go - timeout: 2m - reason: issue57309 run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue7316.go - timeout: 4m - reason: issue7316 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: interface/bigdata.go - timeout: 1m - reason: interface/bigdata baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: interface/convert1.go - timeout: 1m - reason: interface/convert1 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue73748b.go - timeout: 2m - reason: issue73748b run runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: method3.go - timeout: 2m - reason: method3 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: method7.go - timeout: 2m - reason: method7 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: reflectmethod7.go - timeout: 2m - reason: reflectmethod7 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: mergemul.go - timeout: 4m - reason: mergemul runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: slice3.go - timeout: 8m - reason: slice3 runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: stackobj2.go - timeout: 1m - reason: stackobj2 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: bom.go - timeout: 8m - reason: bom runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: convinline.go - timeout: 4m - reason: convinline runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: align.go - timeout: 1m - reason: align baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: atomicload.go - timeout: 1m - reason: atomicload baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: clear.go - timeout: 2m - reason: clear baseline run exceeds the 1m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: closure1.go - timeout: 1m - reason: closure1 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: cmp.go - timeout: 1m - reason: cmp baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: decl.go - timeout: 1m - reason: decl baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug453.go - timeout: 1m - reason: bug453 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug457.go - timeout: 1m - reason: bug457 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: crlf.go - timeout: 8m - reason: crlf runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.24 - platform: linux/amd64 - directive: runoutput - case: crlf.go - timeout: 2m - reason: crlf runoutput generation runs past the default timeout on linux/amd64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/bug447.go - timeout: 4m - reason: bug447 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: 64bit.go - timeout: 4m - reason: 64bit runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue7867.go - timeout: 8m - reason: issue7867 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue9604b.go - timeout: 8m - reason: issue9604b runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: args.go - timeout: 1m - reason: args baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: bigmap.go - timeout: 1m - reason: bigmap baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: closedchan.go - timeout: 1m - reason: closedchan baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: closure4.go - timeout: 2m - reason: closure4 baseline run exceeds the 1m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: complit.go - timeout: 1m - reason: complit baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: const4.go - timeout: 1m - reason: const4 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: for.go - timeout: 1m - reason: for baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: func7.go - timeout: 1m - reason: func7 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue8011.go - timeout: 1m - reason: issue8011 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue8047b.go - timeout: 1m - reason: issue8047b baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue8155.go - timeout: 1m - reason: issue8155 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue8347.go - timeout: 1m - reason: issue8347 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue8620.go - timeout: 2m - reason: issue8620 baseline run exceeds the 1m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue9110.go - timeout: 1m - reason: issue9110 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue9738.go - timeout: 2m - reason: issue9738 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue40367.go - timeout: 2m - reason: issue40367 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue40917.go - timeout: 2m - reason: issue40917 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue41239.go - timeout: 2m - reason: issue41239 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue41780.go - timeout: 2m - reason: issue41780 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue42032.go - timeout: 2m - reason: issue42032 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue4620.go - timeout: 2m - reason: issue4620 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue46304.go - timeout: 2m - reason: issue46304 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue4748.go - timeout: 2m - reason: issue4748 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue47771.go - timeout: 2m - reason: issue47771 run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: strength.go - timeout: 8m - reason: strength runoutput generation exceeds the 4m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: switch.go - timeout: 2m - reason: switch baseline run exceeds the 1m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: typeswitch1.go - timeout: 1m - reason: typeswitch1 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: shift3.go - timeout: 2m - reason: shift3 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: rotate1.go - timeout: 4m - reason: rotate1 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: rotate2.go - timeout: 4m - reason: rotate2 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: rotate3.go - timeout: 8m - reason: rotate3 runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: sizeof.go - timeout: 1m - reason: sizeof baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: clearfat.go - timeout: 2m - reason: clearfat runoutput generation runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: rangegen.go - timeout: 20m - reason: rangegen runoutput compiles the generated stress test past 10m on darwin/arm64 CI - - version: go1.26 - platform: darwin/arm64 - directive: run - case: closure.go - timeout: 2m - reason: closure run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug452.go - timeout: 2m - reason: bug452 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug454.go - timeout: 2m - reason: bug454 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug456.go - timeout: 2m - reason: bug456 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug461.go - timeout: 2m - reason: bug461 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug473.go - timeout: 2m - reason: bug473 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug483.go - timeout: 2m - reason: bug483 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug225.go - timeout: 2m - reason: bug225 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/bug230.go - timeout: 2m - reason: bug230 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue10407.go - timeout: 8m - reason: issue10407 runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue10925.go - timeout: 2m - reason: issue10925 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue11286.go - timeout: 2m - reason: issue11286 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue29013a.go - timeout: 2m - reason: issue29013a run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue30956.go - timeout: 2m - reason: issue30956 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue31419.go - timeout: 2m - reason: issue31419 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue43444.go - timeout: 2m - reason: issue43444 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue4353.go - timeout: 2m - reason: issue4353 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue5162.go - timeout: 4m - reason: issue5162 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue51913.go - timeout: 2m - reason: issue51913 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue57309.go - timeout: 2m - reason: issue57309 run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue7316.go - timeout: 4m - reason: issue7316 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: interface/bigdata.go - timeout: 1m - reason: interface/bigdata baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: interface/convert1.go - timeout: 1m - reason: interface/convert1 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue73748b.go - timeout: 2m - reason: issue73748b run runs past the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: method3.go - timeout: 2m - reason: method3 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: method7.go - timeout: 2m - reason: method7 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: reflectmethod7.go - timeout: 2m - reason: reflectmethod7 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: mergemul.go - timeout: 4m - reason: mergemul runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: slice3.go - timeout: 8m - reason: slice3 runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: stackobj2.go - timeout: 1m - reason: stackobj2 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 + - directive: run + case: fixedbugs/issue16016.go + reason: the test intentionally creates enough goroutines to exhaust LLGo's one-thread-per-goroutine host limit + - version: go1.24 platform: darwin/arm64 directive: runoutput - case: 64bit.go - timeout: 2m - reason: 64bit runoutput generation runs past the default timeout on darwin/arm64 + case: rangegen.go + reason: go1.24 rangegen runoutput exceeds the darwin/arm64 CI timeout - version: go1.26 platform: darwin/arm64 directive: runoutput - case: bom.go - timeout: 4m - reason: bom runoutput generation runs past the 2m timeout on darwin/arm64 go1.26 - - version: go1.26 + case: rangegen.go + reason: go1.26 rangegen generated build exceeds the darwin/arm64 hosted runner memory budget + - directive: run + case: chan/goroutines.go + reason: the test intentionally creates enough goroutines to exhaust LLGo's one-thread-per-goroutine host limit + - directive: run + case: chanlinear.go + reason: the test repeatedly doubles a goroutine-per-channel workload and can exhaust LLGo's one-thread-per-goroutine host limit + - version: go1.24 platform: darwin/arm64 directive: runoutput - case: convinline.go - timeout: 4m - reason: convinline runoutput generation runs past the 2m timeout on darwin/arm64 go1.26 + case: fixedbugs/bug449.go + reason: go1.24 bug449 generated build exceeds the darwin/arm64 hosted runner resource budget - version: go1.26 platform: darwin/arm64 directive: runoutput - case: crlf.go - timeout: 8m - reason: crlf runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.26 + case: fixedbugs/bug449.go + reason: go1.26 bug449 generated build exceeds the darwin/arm64 hosted runner resource budget + - version: go1.24 platform: linux/amd64 directive: runoutput - case: crlf.go - timeout: 2m - reason: crlf runoutput generation runs past the default timeout on linux/amd64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/bug447.go - timeout: 4m - reason: bug447 runoutput generation runs past the 2m timeout on darwin/arm64 go1.26 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue7867.go - timeout: 8m - reason: issue7867 runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: fixedbugs/issue9604b.go - timeout: 8m - reason: issue9604b runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue9738.go - timeout: 2m - reason: issue9738 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue40367.go - timeout: 2m - reason: issue40367 run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue40917.go - timeout: 2m - reason: issue40917 run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue41239.go - timeout: 2m - reason: issue41239 run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue41780.go - timeout: 2m - reason: issue41780 run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue42032.go - timeout: 2m - reason: issue42032 run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue4620.go - timeout: 2m - reason: issue4620 run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue46304.go - timeout: 2m - reason: issue46304 run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue4748.go - timeout: 2m - reason: issue4748 run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: fixedbugs/issue47771.go - timeout: 2m - reason: issue47771 run exceeds the default timeout on darwin/arm64 + case: fixedbugs/bug449.go + reason: go1.24 bug449 generated build exceeds the linux/amd64 hosted runner memory budget - version: go1.26 - platform: darwin/arm64 + platform: linux/amd64 directive: runoutput - case: strength.go - timeout: 4m - reason: strength runoutput generation exceeds the 2m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: switch.go - timeout: 1m - reason: switch baseline run exceeds the default timeout on darwin/arm64 + case: fixedbugs/bug449.go + reason: go1.26 bug449 generated build exceeds the linux/amd64 hosted runner memory budget +timeouts: - version: go1.26 platform: darwin/arm64 directive: run - case: shift3.go - timeout: 4m - reason: shift3 baseline run exceeds the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: initialize.go - timeout: 12m - reason: initialize run exceeds the 4m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: const3.go - timeout: 1m - reason: const3 baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: convT2X.go - timeout: 1m - reason: convT2X baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: copy.go - timeout: 1m - reason: copy baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: defer.go - timeout: 1m - reason: defer baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: int_lit.go - timeout: 4m - reason: int_lit baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: linkobj.go - timeout: 4m - reason: linkobj baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: simassign.go - timeout: 4m - reason: simassign baseline/build run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: strcopy.go - timeout: 4m - reason: strcopy baseline run exceeds the default timeout on darwin/arm64 + case: fixedbugs/issue79186.go + timeout: 90s + reason: the 51.2 million-operation RWMutex stress loop needs load-dependent runtime slack - version: go1.26 - platform: darwin/arm64 + platform: linux/amd64 directive: run - case: initialize.go - timeout: 4m - reason: initialize run exceeds the default timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: rotate1.go - timeout: 2m - reason: rotate1 runoutput generation runs past the default timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: clearfat.go - timeout: 4m - reason: clearfat runoutput generation runs past the 2m timeout on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: runoutput - case: rotate2.go - timeout: 12m - reason: rotate2 runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: rotate2.go - timeout: 12m - reason: rotate2 runoutput generation runs past the 4m timeout on darwin/arm64 - - version: go1.26 - platform: darwin/arm64 - directive: runoutput - case: rotate3.go - timeout: 4m - reason: rotate3 runoutput generation runs past the 2m timeout on darwin/arm64 + case: fixedbugs/issue79186.go + timeout: 90s + reason: the 51.2 million-operation RWMutex stress loop needs load-dependent runtime slack - version: go1.26 - platform: darwin/arm64 - directive: run - case: sizeof.go - timeout: 1m - reason: sizeof baseline run exceeds the default timeout on darwin/arm64 - - version: go1.24 - platform: linux/amd64 - directive: runoutput - case: 64bit.go - timeout: 2m - reason: 64bit runoutput generation runs past the default timeout on linux/amd64 - - version: go1.24 - platform: linux/amd64 - directive: runoutput - case: bom.go - timeout: 2m - reason: bom runoutput generation runs past the default timeout on linux/amd64 - - version: go1.24 platform: linux/amd64 directive: run - case: fixedbugs/bug265.go - timeout: 4m - reason: bug265 llgo build exceeds the 3m build timeout on linux/amd64 - - version: go1.24 - platform: linux/amd64 - directive: runoutput - case: clearfat.go - timeout: 2m - reason: clearfat runoutput generation runs past the default timeout on linux/amd64 + case: abi/uglyfib.go + timeout: 1m + reason: uglyfib runs close to the default timeout on loaded linux/amd64 runners - version: go1.24 platform: linux/amd64 directive: run case: nosplit.go timeout: 2m reason: nosplit run runs past the default timeout on linux/amd64 - - version: go1.26 - platform: linux/amd64 - directive: runoutput - case: 64bit.go - timeout: 2m - reason: 64bit runoutput generation runs past the default timeout on linux/amd64 - - version: go1.26 - platform: linux/amd64 - directive: runoutput - case: bom.go - timeout: 2m - reason: bom runoutput generation runs past the default timeout on linux/amd64 - - version: go1.26 - platform: linux/amd64 - directive: run - case: fixedbugs/bug265.go - timeout: 4m - reason: bug265 llgo build exceeds the 3m build timeout on linux/amd64 - - version: go1.26 - platform: linux/amd64 - directive: runoutput - case: clearfat.go - timeout: 2m - reason: clearfat runoutput generation runs past the default timeout on linux/amd64 - version: go1.26 platform: linux/amd64 directive: run @@ -1127,56 +80,11 @@ flakes: directive: run case: fixedbugs/issue79186.go reason: the RWMutex stress test passes when the host is idle but can exceed its timeout under sustained CPU contention - - version: go1.26 - platform: darwin/arm64 - directive: run - case: chanlinear.go - reason: the timing-based linearity check can pass or report chanSelect as too slow on darwin/arm64 - version: go1.26 platform: linux/amd64 directive: run case: fixedbugs/issue13160.go reason: go1.26 goroot run can either pass or panic in GC_call_with_stack_base on linux/amd64 - - version: go1.24 - platform: linux/amd64 - directive: run - case: fixedbugs/issue48898.go - reason: go1.24 goroot run can either pass or fail on linux/amd64 - - version: go1.26 - platform: linux/amd64 - directive: run - case: stack.go - reason: go1.26 goroot run can either pass or fail on linux/amd64 - - version: go1.24 - platform: linux/amd64 - directive: run - case: stack.go - reason: go1.24 goroot run can either pass or fail on linux/amd64 - - version: go1.26 - platform: darwin/arm64 - directive: run - case: stack.go - reason: go1.26 goroot run can either pass or fail on darwin/arm64 - - version: go1.24 - platform: darwin/arm64 - directive: run - case: stack.go - reason: go1.24 goroot run can either pass or fail on darwin/arm64 - - version: go1.26 - platform: linux/amd64 - directive: run - case: fixedbugs/issue48898.go - reason: go1.26 goroot run can either pass or fail on linux/amd64 - - version: go1.26 - platform: linux/amd64 - directive: run - case: fixedbugs/issue52612.go - reason: go1.26 goroot run can either pass or panic on linux/amd64 - - version: go1.24 - platform: linux/amd64 - directive: run - case: fixedbugs/issue52612.go - reason: go1.24 goroot run can panic on linux/amd64 - version: go1.24 platform: darwin/arm64 directive: runoutput @@ -1187,26 +95,6 @@ flakes: directive: runoutput case: rotate0.go reason: rotate0 runoutput can either pass or time out on darwin/arm64 - - platform: linux/amd64 - directive: run - case: goprint.go - reason: linux/amd64 goroot run can either pass or mismatch stderr - - platform: darwin/arm64 - directive: run - case: fixedbugs/issue48898.go - reason: darwin/arm64 goroot run can either pass or fail - - platform: darwin/arm64 - directive: run - case: goprint.go - reason: darwin/arm64 goroot run can either pass or fail - - platform: darwin/arm64 - directive: run - case: init1.go - reason: darwin/arm64 goroot run can either pass or expose incomplete runtime initialization - - platform: linux/amd64 - directive: run - case: init1.go - reason: linux/amd64 goroot run can either pass or expose incomplete runtime initialization - platform: linux/amd64 directive: run case: fixedbugs/issue5493.go @@ -1230,15 +118,25 @@ flakes: directive: run case: fixedbugs/issue27695.go reason: concurrent GC can either preserve reflect-call results or expose incomplete result scanning on darwin/arm64 - - platform: linux/amd64 - directive: run + - directive: run case: typeparam/chans.go - reason: select over the unbuffered channel can either complete or miss the final receive and time out on linux/amd64 + reason: select over the unbuffered channel can either complete or miss the final receive and time out - platform: darwin/arm64 directive: run case: fixedbugs/issue25897a.go reason: reflect-generated goroutines under a single-P continuous-GC loop can complete or exceed the 1m run timeout on darwin/arm64 xfails: + - directive: runoutput + case: index0.go + reason: LLVM 19 crashes in target object emission while compiling the generated index stress program + - directive: run + case: fixedbugs/issue34123.go + reason: LLGo reports the deferred recovery frame two source lines earlier than cmd/compile + - version: go1.26 + platform: linux/amd64 + directive: run + case: convert5.go + reason: LLGo does not match Go 1.26 linux/amd64 saturation results for out-of-range floating-point conversions - version: go1.26 directive: errorcheck case: fixedbugs/issue4776.go @@ -1264,18 +162,6 @@ xfails: case: bombad.go reason: llgo parser recovery emits additional byte-order-mark diagnostics - - platform: darwin/arm64 - directive: run - case: heapsampling.go - reason: latest main goroot run failure on darwin/arm64 - - version: go1.24 - platform: linux/amd64 - directive: run - case: heapsampling.go - reason: go1.24 goroot run failure on linux/amd64 - - version: go1.26 - platform: linux/amd64 - directive: run + - directive: run case: heapsampling.go - reason: go1.26 goroot run failure on linux/amd64 - + reason: LLGo does not currently report the heap-profile samples required by this runtime test