sync — validation proof
Go’s own sync test suite, converted to C# by go2cs, built against the converted standard
library, run under the Go-semantics test host, and compared verdict for verdict against a clean
go test -json baseline of the same sources. This page is generated by the converter from that
comparison — it is the evidence behind the sync row in
Validated Test Packages.
Validated 2026-09-03 · converter 93a131a3f
47 matched · 4 disclosed — Go 1.23.12, windows/amd64, converted package
src/core/sync.
Measured at Release (tiered JIT off), oracle go version go1.23.12 windows/amd64.
Verdicts
| Test | go test |
go2cs |
|---|---|---|
TestCompareAndSwap_NonExistingKey |
pass | pass |
TestConcurrentClear |
pass | pass |
TestConcurrentRange |
pass | pass |
TestCondBroadcast |
pass | pass |
TestCondCopy |
pass | pass |
TestCondSignal |
pass | pass |
TestCondSignalGenerations |
pass | pass |
TestCondSignalStealing |
pass | pass |
TestIssue40999 |
pass | pass |
TestMapClearNoAllocations |
pass | pass |
TestMapMatchesDeepCopy |
pass | pass |
TestMapMatchesRWMutex |
pass | pass |
TestMapRangeNestedCall |
pass | pass |
TestMapRangeNoAllocations |
pass | pass |
TestMutex |
pass | pass |
TestMutexFairness |
pass | pass |
TestMutexMisuse |
pass | pass |
TestNilPool |
pass | pass |
TestNilPool/Get |
pass | pass |
TestNilPool/Put |
pass | pass |
TestOnce |
pass | pass |
TestOnceFunc |
pass | pass |
TestOnceFuncGoexit |
pass | pass |
TestOnceFuncPanic |
pass | pass |
TestOnceFuncPanicNil |
pass | pass |
TestOnceFuncPanicTraceback |
pass | pass |
TestOncePanic |
pass | pass |
TestOnceValue |
pass | pass |
TestOnceValuePanic |
pass | pass |
TestOnceValues |
pass | pass |
TestOnceValuesPanic |
pass | pass |
TestOnceXGC |
pass | fail (disclosed) |
TestOnceXGC/OnceFunc |
pass | fail (disclosed) |
TestOnceXGC/OnceValue |
pass | fail (disclosed) |
TestOnceXGC/OnceValues |
pass | fail (disclosed) |
TestParallelReaders |
pass | pass |
TestPool |
pass | pass |
TestPoolChain |
pass | pass |
TestPoolDequeue |
pass | pass |
TestPoolGC |
pass | pass |
TestPoolNew |
pass | pass |
TestPoolRelease |
pass | pass |
TestPoolStress |
pass | pass |
TestRLocker |
pass | pass |
TestRWMutex |
pass | pass |
TestRace |
pass | pass |
TestSemaphore |
pass | pass |
TestWaitGroup |
pass | pass |
TestWaitGroupAlign |
pass | pass |
TestWaitGroupMisuse |
pass | pass |
TestWaitGroupRace |
pass | pass |
Disclosed divergences
A disclosed divergence is a specific Go assertion the managed CLR provably cannot satisfy — not
a skipped test and not a tolerance. Each one is pinned by exact failure signature in the package’s
hand-owned go2cs_test_disclosures.json;
a disclosed test that fails any other way is still a hard mismatch.
| Test | Class | Pinned reason |
|---|---|---|
TestOnceXGC |
aggregate |
no failure text of its own — the roll-up of this test’s disclosed subtests |
TestOnceXGC/OnceFunc |
codegen-liveness |
The test asserts its own frame’s buf is collectible while the frame is still running. sync.OnceFunc DOES drop the wrapped function (measured: the backing array is released after the first call), but the test’s own f := fn(buf) passes the 32-byte slice header BY VALUE, so the x64 ABI makes the caller materialize an address-exposed stack temp; an address-exposed slot is not lifetime-tracked and the CLR reports it live for the whole method, pinning the array until the subtest RETURNS. Go’s per-safepoint liveness maps release the caller’s copy at its last use. Not satisfiable at any layer go2cs owns — it is the CLR’s GC-info conservatism, and it holds in fully optimized code, not just under the non-optimizing JIT. |
TestOnceXGC/OnceValue |
codegen-liveness |
Same as TestOnceXGC/OnceFunc: the by-value slice argument in the test’s own body is reported live for the whole frame by the CLR’s GC info, so the finalizer cannot become due while the test is looking |
TestOnceXGC/OnceValues |
codegen-liveness |
Same as TestOnceXGC/OnceFunc: the by-value slice argument in the test’s own body is reported live for the whole frame by the CLR’s GC info, so the finalizer cannot become due while the test is looking |
Excluded declarations
Declarations filtered from both sides of the comparison, and therefore not claimed above:
Benchmark, Fuzz and Example declarations the converted host does not execute, plus any
test requiring a capability the managed runtime does not provide — a testing member the host
has not implemented, or a platform behavior it provably cannot reproduce. Each is named with
the capability it needs.
- BenchmarkAdversarialAlloc (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkAdversarialDelete (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkClear (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCompareAndDeleteCollision (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCompareAndDeleteMostlyHits (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCompareAndDeleteMostlyMisses (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCompareAndSwapCollision (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCompareAndSwapMostlyHits (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCompareAndSwapMostlyMisses (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCompareAndSwapNoExistingKey (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCompareAndSwapValueNotEqual (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCond1 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCond16 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCond2 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCond32 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCond4 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCond8 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkContendedSemaphore (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkDeleteCollision (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLoadAndDeleteBalanced (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLoadAndDeleteCollision (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLoadAndDeleteUnique (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLoadMostlyHits (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLoadMostlyMisses (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLoadOrStoreBalanced (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLoadOrStoreCollision (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLoadOrStoreUnique (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMutex (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMutexNoSpin (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMutexSlack (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMutexSpin (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMutexUncontended (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMutexWork (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMutexWorkSlack (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkOnce (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkOnceFunc (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkOnceValue (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkPool (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkPoolExpensiveNew (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkPoolOverflow (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkPoolSTW (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkPoolStarvation (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRWMutexUncontended (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRWMutexWorkWrite10 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRWMutexWorkWrite100 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRWMutexWrite10 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRWMutexWrite100 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRange (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSemaSyntBlock (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSemaSyntNonblock (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSemaUncontended (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSemaWorkBlock (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSemaWorkNonblock (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSwapCollision (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSwapMostlyHits (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSwapMostlyMisses (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkUncontendedSemaphore (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkWaitGroupActuallyWait (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkWaitGroupAddDone (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkWaitGroupAddDoneWork (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkWaitGroupUncontended (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkWaitGroupWait (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkWaitGroupWaitWork (benchmark): benchmark execution is deferred to Phase 4D
- ExampleOnce (example): example execution is deferred to Phase 4D
- ExampleOnceValue (example): example execution is deferred to Phase 4D
- ExampleOnceValues (example): example execution is deferred to Phase 4D
- ExamplePool (example): example execution is deferred to Phase 4D
- ExampleWaitGroup (example): example execution is deferred to Phase 4D