Skip to content

goroot: reduce xfail backlog across go1.24-go1.26#1773

Open
cpunion wants to merge 155 commits intogoplus:feat/go126-source-patch-cifrom
cpunion:analysis/goroot-xfail-priority
Open

goroot: reduce xfail backlog across go1.24-go1.26#1773
cpunion wants to merge 155 commits intogoplus:feat/go126-source-patch-cifrom
cpunion:analysis/goroot-xfail-priority

Conversation

@cpunion
Copy link
Copy Markdown
Collaborator

@cpunion cpunion commented Mar 31, 2026

Summary

This PR continues the GOROOT runner and xfail cleanup on top of #1759.

Current scope stays limited to:

  • Go 1.24.11, 1.25.0, and 1.26.0
  • linux/amd64, linux/arm64, and darwin/arm64 accounting
  • ci discovery mode for the active runner surface

Included

  • runtime/SSA fixes and xfail cleanup carried from the earlier commits in this branch
  • widened GOROOT run-case discovery for CI-oriented run directives
  • xfail, host-skip, timeout, and flaky metadata for the expanded runner surface
  • Go 1.26 new(expr) support via golang.org/x/tools/go/ssa v0.38.0, which emits the required store after the allocation
  • removal of the now-stale newexpr.go xfails for go1.26 darwin/arm64 and go1.26 linux/amd64
  • Go 1.24 linux/amd64 flaky metadata for fixedbugs/issue52612.go, matching existing Go 1.25/1.26 behavior
  • additional SSA unit coverage for type-equivalence and inline/index edge cases to recover project coverage

Current Inventory

Current test/goroot/xfail.yaml inventory in this branch:

  • 477 xfails
  • 12 flaky entries
  • 18 host skips
  • 269 timeout overrides
  • 776 total metadata entries

Current ci mode runner accounting after host-skip, xfail, and flaky matching:

Platform Go version Total cases Host skips Xfails Flaky
linux/amd64 go1.24.11 1027 2 102 2
linux/amd64 go1.25.0 1035 3 104 3
linux/amd64 go1.26.0 1047 2 119 4
darwin/arm64 go1.24.11 1023 7 103 1
darwin/arm64 go1.25.0 1031 7 105 1
darwin/arm64 go1.26.0 1043 7 120 1
linux/arm64 go1.24.11 1025 0 0 0
linux/arm64 go1.25.0 1033 0 0 0
linux/arm64 go1.26.0 1045 0 0 0

For go1.26, remaining xfail functional categories are:

Platform builtin/layout channels/select debug/trace generics language semantics map/interface equality methods/reflection panic/defer runtime/gc/profiler other
linux/amd64 1 2 6 9 3 1 5 7 4 81
darwin/arm64 1 4 7 9 2 1 5 8 4 79

For go1.26, host-skip and flaky functional categories are:

Kind Platform Categories
Host skip linux/amd64 channels/select 1, other 1
Host skip darwin/arm64 channels/select 2, runtime/gc/profiler 1, other 4
Flaky linux/amd64 debug/trace 1, other 3
Flaky darwin/arm64 other 1

Runner Modes

test/goroot keeps three discovery modes:

  • legacy: original narrow mode, only bare // run
  • ci: current CI mode, covering run, run <args>, runoutput, rundir, runindir, and buildrun
  • runlike: broader local mode that also includes buildrundir

The active CI validation continues to use ci mode. runlike remains local/experimental until the known buildrundir blockers are fixed.

Known buildrundir blockers from the broader local expansion:

  • retjmp.go: translated asm return-jump semantics still diverge with panic: f2 not called
  • asmhdr.go: plan9asm constant expansion still rejects string consts with panic: "test" not an Int

Validation

Latest local validation:

  • git diff --check
  • go test ./test/goroot -count=1 -run 'Test(FlakyMatch|XFailMatch|HostSkipMatch|TimeoutMatch)'
  • docker run --rm --platform linux/amd64 -v "$PWD":/workspace -v llgo-empty-crosscompile:/workspace/crosscompile -w /workspace llgo-wt-goroot-xfail-priority-llgo-dev-amd64:latest bash -lc 'go test ./test/goroot -count=1 -timeout 30m -run TestGoRootRunCases -args -goroot /workspace/.cache/goroot-linux-sdks/go1.26.0 -directive-mode ci -xfail /tmp/no-such-xfail.yaml -case "^newexpr\\.go$"'
  • docker run --rm --platform linux/amd64 -v "$PWD":/workspace -v llgo-empty-crosscompile:/workspace/crosscompile -w /workspace llgo-wt-goroot-xfail-priority-llgo-dev-amd64:latest bash -lc 'go test ./test/goroot -count=1 -timeout 30m -run TestGoRootRunCases -args -goroot /workspace/.cache/goroot-linux-sdks/go1.26.0 -directive-mode ci -case "^newexpr\\.go$"'
  • /Users/lijie/sdk/go1.26.0/bin/go test ./test/goroot -count=1 -timeout 30m -run TestGoRootRunCases -args -goroot /Users/lijie/sdk/go1.26.0 -go /Users/lijie/sdk/go1.26.0/bin/go -directive-mode ci -case '^newexpr\\.go$'
  • docker run --rm --platform linux/amd64 -v "$PWD":/workspace -v llgo-empty-crosscompile:/workspace/crosscompile -w /workspace llgo-wt-goroot-xfail-priority-llgo-dev-amd64:latest bash -lc 'go test ./test/goroot -count=1 -timeout 90m -run TestGoRootRunCases -args -goroot /workspace/.cache/goroot-linux-sdks/go1.24.11 -directive-mode ci -shard-index 3 -shard-total 4'
  • go test ./ssa -count=1 -run 'Test(FunctionInlineAttributes|IndexRejectsInvalidTypes|NamedTypeEquivalent|NamedStructLayoutEquivalent|FuncName_AliasPointerReceiverUsesUnderlyingNamedType)'
  • go test ./ssa -coverprofile=/tmp/llgo-ssa-after3.cover -covermode=atomic (94.9%, +13 covered statements vs the prior local profile)
  • GOTOOLCHAIN=local go install ./cmd/llgo
  • PATH="$(go env GOPATH)/bin:$PATH" GOTOOLCHAIN=local bash -lc 'source doc/_readme/scripts/run.sh' exited 0; the script still prints existing local Python 3.14 SRE module mismatch/segfault diagnostics because it does not run with set -e, matching CI semantics

GitHub validation for head b259f3c7cd2a32c76f470d87358dba234cfca380:

  • PR checks: 81 passed, 1 skipped (release), 0 pending, 0 failed
  • codecov/project and codecov/patch passed

Broader local package validation from this iteration:

  • go test ./internal/build ./cl ./ssa -count=1 passed internal/build and ssa; local cl timed out after 10 minutes in TestRunFromTestlibc/setjmp, which is outside the newexpr.go path and should be treated as a host/local timeout rather than a passing validation.

Known follow-up categories to prioritize next:

  • remaining builtin/layout: cmplxdivide.go
  • language semantics: nilptr.go, range4.go, rangegen.go
  • layout/runtime edge cases currently grouped under other

cpunion added 30 commits March 31, 2026 10:26
cpunion added 30 commits April 13, 2026 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant