log/slog — validation proof

Go’s own log/slog 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 log/slog row in Validated Test Packages.

Validated 2026-10-25 · converter 3e3f18925

228 matched · 21 disclosed — Go 1.26.10, windows/amd64, converted package src/core/log/slog.

Measured at Release (tiered JIT off), oracle go version go1.26.10 windows/amd64.

Verdicts

Test go test go2cs
TestAliasingAndClone pass pass
TestAlloc pass fail (disclosed)
TestAlloc/2_pairs pass fail (disclosed)
TestAlloc/2_pairs_disabled pass pass
TestAlloc/2_pairs_disabled_inline pass fail (disclosed)
TestAlloc/9_kvs pass fail (disclosed)
TestAlloc/Error pass fail (disclosed)
TestAlloc/Info pass fail (disclosed)
TestAlloc/attrs1 pass fail (disclosed)
TestAlloc/attrs3 pass fail (disclosed)
TestAlloc/attrs3_disabled pass fail (disclosed)
TestAlloc/attrs6 pass fail (disclosed)
TestAlloc/attrs9 pass fail (disclosed)
TestAlloc/logger.Info pass fail (disclosed)
TestAlloc/logger.Log pass fail (disclosed)
TestAlloc/pairs pass fail (disclosed)
TestAnyLevelAlloc pass fail (disclosed)
TestAnyValue pass pass
TestAppendJSONValue pass pass
TestAttrNoAlloc pass fail (disclosed)
TestAttrs pass pass
TestCallDepth pass pass
TestCallDepthConnection pass pass
TestCallDepthConnection/log.Default.Fatal pass pass
TestCallDepthConnection/log.Default.Fatalf pass pass
TestCallDepthConnection/log.Default.Fatalln pass pass
TestCallDepthConnection/log.Default.Output pass pass
TestCallDepthConnection/log.Default.Panic pass pass
TestCallDepthConnection/log.Default.Panicf pass pass
TestCallDepthConnection/log.Default.Panicln pass pass
TestCallDepthConnection/log.Fatal pass pass
TestCallDepthConnection/log.Fatalf pass pass
TestCallDepthConnection/log.Fatalln pass pass
TestCallDepthConnection/log.Output pass pass
TestCallDepthConnection/log.Panic pass pass
TestCallDepthConnection/log.Panicf pass pass
TestCallDepthConnection/log.Panicln pass pass
TestConcurrentWrites pass pass
TestConcurrentWrites/json pass pass
TestConcurrentWrites/text pass pass
TestConnections pass pass
TestConnections/wrap_default_handler pass pass
TestContext pass pass
TestDefaultHandle pass pass
TestDefaultHandle/attrs pass pass
TestDefaultHandle/group pass pass
TestDefaultHandle/groups pass pass
TestDefaultHandle/no_attrs pass pass
TestDefaultHandle/preformatted pass pass
TestDefaultHandle/preformatted_groups pass pass
TestDefaultHandle/two_with-groups pass pass
TestDiscardHandler pass pass
TestEmptyGroup pass pass
TestHandlerEnabled pass pass
TestJSONAllocs pass fail (disclosed)
TestJSONAllocs/attrs pass fail (disclosed)
TestJSONAllocs/message pass fail (disclosed)
TestJSONAndTextHandlers pass pass
TestJSONAndTextHandlers/GroupValue_as_Attr_value pass pass
TestJSONAndTextHandlers/GroupValue_as_Attr_value/json pass pass
TestJSONAndTextHandlers/GroupValue_as_Attr_value/text pass pass
TestJSONAndTextHandlers/LogValuer pass pass
TestJSONAndTextHandlers/LogValuer/json pass pass
TestJSONAndTextHandlers/LogValuer/text pass pass
TestJSONAndTextHandlers/Source pass pass
TestJSONAndTextHandlers/Source/json pass pass
TestJSONAndTextHandlers/Source/text pass pass
TestJSONAndTextHandlers/basic pass pass
TestJSONAndTextHandlers/basic/json pass pass
TestJSONAndTextHandlers/basic/text pass pass
TestJSONAndTextHandlers/byte_slice pass pass
TestJSONAndTextHandlers/byte_slice/json pass pass
TestJSONAndTextHandlers/byte_slice/text pass pass
TestJSONAndTextHandlers/cap_keys pass pass
TestJSONAndTextHandlers/cap_keys/json pass pass
TestJSONAndTextHandlers/cap_keys/text pass pass
TestJSONAndTextHandlers/empty_group pass pass
TestJSONAndTextHandlers/empty_group/json pass pass
TestJSONAndTextHandlers/empty_group/text pass pass
TestJSONAndTextHandlers/empty_key pass pass
TestJSONAndTextHandlers/empty_key/json pass pass
TestJSONAndTextHandlers/empty_key/text pass pass
TestJSONAndTextHandlers/empty_with-groups pass pass
TestJSONAndTextHandlers/empty_with-groups,_no_non-empty_attrs pass pass
TestJSONAndTextHandlers/empty_with-groups,_no_non-empty_attrs/json pass pass
TestJSONAndTextHandlers/empty_with-groups,_no_non-empty_attrs/text pass pass
TestJSONAndTextHandlers/empty_with-groups/json pass pass
TestJSONAndTextHandlers/empty_with-groups/text pass pass
TestJSONAndTextHandlers/escapes pass pass
TestJSONAndTextHandlers/escapes/json pass pass
TestJSONAndTextHandlers/escapes/text pass pass
TestJSONAndTextHandlers/group_and_key_(or_both)_needs_quoting pass pass
TestJSONAndTextHandlers/group_and_key_(or_both)_needs_quoting/json pass pass
TestJSONAndTextHandlers/group_and_key_(or_both)_needs_quoting/text pass pass
TestJSONAndTextHandlers/groups pass pass
TestJSONAndTextHandlers/groups/json pass pass
TestJSONAndTextHandlers/groups/text pass pass
TestJSONAndTextHandlers/inline_group pass pass
TestJSONAndTextHandlers/inline_group/json pass pass
TestJSONAndTextHandlers/inline_group/text pass pass
TestJSONAndTextHandlers/json.RawMessage pass pass
TestJSONAndTextHandlers/json.RawMessage/json pass pass
TestJSONAndTextHandlers/json.RawMessage/text pass pass
TestJSONAndTextHandlers/nested_empty_group pass pass
TestJSONAndTextHandlers/nested_empty_group/json pass pass
TestJSONAndTextHandlers/nested_empty_group/text pass pass
TestJSONAndTextHandlers/nested_non-empty_group pass pass
TestJSONAndTextHandlers/nested_non-empty_group/json pass pass
TestJSONAndTextHandlers/nested_non-empty_group/text pass pass
TestJSONAndTextHandlers/one_empty_with-group pass pass
TestJSONAndTextHandlers/one_empty_with-group/json pass pass
TestJSONAndTextHandlers/one_empty_with-group/text pass pass
TestJSONAndTextHandlers/preformatted pass pass
TestJSONAndTextHandlers/preformatted/json pass pass
TestJSONAndTextHandlers/preformatted/text pass pass
TestJSONAndTextHandlers/preformatted_cap_keys pass pass
TestJSONAndTextHandlers/preformatted_cap_keys/json pass pass
TestJSONAndTextHandlers/preformatted_cap_keys/text pass pass
TestJSONAndTextHandlers/preformatted_remove_all pass pass
TestJSONAndTextHandlers/preformatted_remove_all/json pass pass
TestJSONAndTextHandlers/preformatted_remove_all/text pass pass
TestJSONAndTextHandlers/preformatted_remove_built-in pass pass
TestJSONAndTextHandlers/preformatted_remove_built-in/json pass pass
TestJSONAndTextHandlers/preformatted_remove_built-in/text pass pass
TestJSONAndTextHandlers/preformatted_with-groups pass pass
TestJSONAndTextHandlers/preformatted_with-groups/json pass pass
TestJSONAndTextHandlers/preformatted_with-groups/text pass pass
TestJSONAndTextHandlers/remove_all pass pass
TestJSONAndTextHandlers/remove_all/json pass pass
TestJSONAndTextHandlers/remove_all/text pass pass
TestJSONAndTextHandlers/remove_built-in pass pass
TestJSONAndTextHandlers/remove_built-in/json pass pass
TestJSONAndTextHandlers/remove_built-in/text pass pass
TestJSONAndTextHandlers/replace_built-in_with_group pass pass
TestJSONAndTextHandlers/replace_built-in_with_group/json pass pass
TestJSONAndTextHandlers/replace_built-in_with_group/text pass pass
TestJSONAndTextHandlers/replace_empty pass pass
TestJSONAndTextHandlers/replace_empty/json pass pass
TestJSONAndTextHandlers/replace_empty/text pass pass
TestJSONAndTextHandlers/replace_empty_1 pass pass
TestJSONAndTextHandlers/replace_empty_1/json pass pass
TestJSONAndTextHandlers/replace_empty_1/text pass pass
TestJSONAndTextHandlers/replace_empty_2 pass pass
TestJSONAndTextHandlers/replace_empty_2/json pass pass
TestJSONAndTextHandlers/replace_empty_2/text pass pass
TestJSONAndTextHandlers/replace_empty_3 pass pass
TestJSONAndTextHandlers/replace_empty_3/json pass pass
TestJSONAndTextHandlers/replace_empty_3/text pass pass
TestJSONAndTextHandlers/replace_empty_inline pass pass
TestJSONAndTextHandlers/replace_empty_inline/json pass pass
TestJSONAndTextHandlers/replace_empty_inline/text pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_1 pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_1/json pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_1/text pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_2 pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_2/json pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_2/text pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_3 pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_3/json pass pass
TestJSONAndTextHandlers/replace_partial_empty_attrs_3/text pass pass
TestJSONAndTextHandlers/replace_resolved_group pass pass
TestJSONAndTextHandlers/replace_resolved_group/json pass pass
TestJSONAndTextHandlers/replace_resolved_group/text pass pass
TestJSONAndTextHandlers/resolve pass pass
TestJSONAndTextHandlers/resolve/json pass pass
TestJSONAndTextHandlers/resolve/text pass pass
TestJSONAndTextHandlers/two_with-groups pass pass
TestJSONAndTextHandlers/two_with-groups/json pass pass
TestJSONAndTextHandlers/two_with-groups/text pass pass
TestJSONAndTextHandlers/with-group pass pass
TestJSONAndTextHandlers/with-group/json pass pass
TestJSONAndTextHandlers/with-group/text pass pass
TestJSONAndTextHandlersWithUnavailableSource pass pass
TestJSONAndTextHandlersWithUnavailableSource/json pass pass
TestJSONAndTextHandlersWithUnavailableSource/text pass pass
TestJSONAppendAttrValueSpecial pass pass
TestJSONHandler pass pass
TestJSONHandler/none pass pass
TestJSONHandler/replace pass pass
TestKindString pass pass
TestLevelAppendText pass pass
TestLevelFlag pass pass
TestLevelMarshalJSON pass pass
TestLevelMarshalText pass pass
TestLevelParse pass pass
TestLevelParseError pass pass
TestLevelString pass pass
TestLevelVar pass pass
TestLevelVarAppendText pass pass
TestLevelVarFlag pass pass
TestLevelVarMarshalText pass pass
TestLevelVarString pass pass
TestLogLoggerLevelForDefaultHandler pass pass
TestLogLoggerLevelForHandlerWriter pass pass
TestLogTextHandler pass pass
TestLogValue pass pass
TestLoggerError pass pass
TestLoggerNoOps pass pass
TestMultiHandler pass pass
TestMultiHandler/Enabled_returns_false_if_no_handlers_are_enabled pass pass
TestMultiHandler/Enabled_returns_true_if_any_handler_is_enabled pass pass
TestMultiHandler/Handle_propagates_errors_from_handlers pass pass
TestMultiHandler/Handle_sends_log_to_all_handlers pass pass
TestMultiHandler/Handle_with_no_handlers pass pass
TestMultiHandler/WithAttrs_propagates_attributes_to_all_handlers pass pass
TestMultiHandler/WithGroup_propagates_group_to_all_handlers pass pass
TestNeedsQuoting pass pass
TestNewLogLogger pass pass
TestNewMultiHandlerCopy pass pass
TestPanics pass pass
TestRecordAttrs pass pass
TestRecordSource pass pass
TestReplaceAttrGroups pass pass
TestSecondWith pass pass
TestSetAttrs pass pass
TestSetDefault pass pass
TestSlogtest pass pass
TestSlogtest/JSON pass pass
TestSlogtest/Text pass pass
TestTextHandler pass pass
TestTextHandler/String_method pass pass
TestTextHandler/String_method/none pass pass
TestTextHandler/String_method/replace pass pass
TestTextHandler/TextMarshaler pass pass
TestTextHandler/TextMarshaler/none pass pass
TestTextHandler/TextMarshaler/replace pass pass
TestTextHandler/TextMarshaler_error pass pass
TestTextHandler/TextMarshaler_error/none pass pass
TestTextHandler/TextMarshaler_error/replace pass pass
TestTextHandler/nil_value pass pass
TestTextHandler/nil_value/none pass pass
TestTextHandler/nil_value/replace pass pass
TestTextHandler/quoted pass pass
TestTextHandler/quoted/none pass pass
TestTextHandler/quoted/replace pass pass
TestTextHandler/struct pass pass
TestTextHandler/struct/none pass pass
TestTextHandler/struct/replace pass pass
TestTextHandler/unquoted pass pass
TestTextHandler/unquoted/none pass pass
TestTextHandler/unquoted/replace pass pass
TestTextHandlerAlloc pass fail (disclosed)
TestTextHandlerPreformatted pass pass
TestValueAny pass pass
TestValueEqual pass pass
TestValueNoAlloc pass fail (disclosed)
TestValueString pass pass
TestValueTime pass pass
TestWriteTimeRFC3339 pass pass

Disclosed divergences

A disclosed divergence is a specific Go assertion this conversion does not 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.

The Class column says which kind each one is: a deferred entry is an assertion the managed CLR can meet, pinned against the named plan that will retire it; every other class is one it provably cannot satisfy.

Test Class Pinned reason
TestAlloc aggregate no failure text of its own — the roll-up of this test’s disclosed subtests
TestAlloc/2_pairs deferred wantAllocs assert with a nonzero Go budget (exactly 2) on Logger.Info with two key/value pairs. At go1.24.13 the converted call counted 10 golib-runtime objects per run: three copies of the ...any parameter pack, the local pcs array runtime.Callers writes into, Record.front, two zero-length Value arrays (log/slog/value.cs:24), the two call-site key literals materialized per call, and StringValue’s element reference through unsafe.StringData. At go1.26.10 the test body changed and it reads 6 per run on windows and linux. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/2_pairs_disabled_inline deferred wantAllocs(t, 0, …) over Logger.Log at LevelInfo with two key/value pairs, on a Logger over DiscardHandler, so the level check fails and nothing is formatted. go1.24.13 asserted wantAllocs(t, 2, …) here and the converted side met it; go1.26.10 tightened the budget to 0, and the converted side still counts 2 per run on both OSes. Its parent TestAlloc discloses as aggregate, with no entry of its own (plan §6).
TestAlloc/9_kvs deferred wantAllocs assert with a nonzero Go budget (exactly 10) on Logger.Info with nine key/value pairs. At go1.24.13 the converted call counted 27 golib-runtime objects per run: three copies of the ...any parameter pack, the local pcs array runtime.Callers writes into, Record.front, the Record.back slice (one of Go’s own 10), nine zero-length Value arrays (log/slog/value.cs:24), nine call-site key literals materialized per call, and three StringValue element references through unsafe.StringData. At go1.26.10 the test body changed and it reads 16 per run on windows and linux. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/Error deferred wantAllocs assert (want 0) on slog.Error(“hello”) through a discarding logger: Go allocates nothing. The converted call counts 2 golib-runtime objects per run that Go keeps off the heap: the local pcs array runtime.Callers writes into (log/slog/logger.cs:293/:315) and Record.front, a fixed array of managed elements (log/slog/record.cs:38). CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/Info deferred wantAllocs assert (want 0) on slog.Info(“hello”) through a discarding logger: Go allocates nothing. The converted call counts 2 golib-runtime objects per run that Go keeps off the heap: the local pcs array runtime.Callers writes into (log/slog/logger.cs:293/:315) and Record.front, a fixed array of managed elements (log/slog/record.cs:38). CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/attrs1 deferred wantAllocs assert (want 0) on Logger.LogAttrs with one Attr: Go’s Value packs the payload into its own fields. At go1.24.13 the converted call counted 7 golib-runtime objects per run: three copies of the ...any parameter pack, the local pcs array runtime.Callers writes into, Record.front, the zero-length array the Value constructor initializes (log/slog/value.cs:24), and the call-site key literal materialized per call. At go1.26.10 the test body changed and it reads 4 per run on windows and linux. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/attrs3 deferred wantAllocs assert (want 0) on Logger.LogAttrs with three Attrs. At go1.24.13 the converted call counted 12 golib-runtime objects per run: three copies of the ...any parameter pack, the local pcs array runtime.Callers writes into, Record.front, three zero-length Value arrays (log/slog/value.cs:24), three call-site key literals materialized per call, and StringValue’s element reference through unsafe.StringData. At go1.26.10 the test body changed and it reads 7 per run on windows and linux. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/attrs3_disabled deferred wantAllocs assert (want 0) on a level-disabled Logger.LogAttrs with three Attrs: the Attrs are constructed before the level check discards them. At go1.24.13 the converted call counted 9 golib-runtime objects per run: two copies of the parameter pack, three zero-length Value arrays (log/slog/value.cs:24), three call-site key literals materialized per call, and StringValue’s element reference through unsafe.StringData. At go1.26.10 the test body changed and it reads 4 per run on windows and linux. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/attrs6 deferred wantAllocs assert with a nonzero Go budget (exactly 1) on Logger.LogAttrs with six Attrs. At go1.24.13 the converted call counted 21 golib-runtime objects per run: three copies of the ...any parameter pack, the local pcs array runtime.Callers writes into, Record.front, six zero-length Value arrays (log/slog/value.cs:24), six call-site key literals materialized per call, two StringValue element references through unsafe.StringData, and two from slices.Grow’s make plus append (slices.cs:441). At go1.26.10 the test body changed and it reads 12 per run on windows and linux. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/attrs9 deferred wantAllocs assert with a nonzero Go budget (exactly 1) on Logger.LogAttrs with nine Attrs. At go1.24.13 the converted call counted 28 golib-runtime objects per run: three copies of the ...any parameter pack, the local pcs array runtime.Callers writes into, Record.front, nine zero-length Value arrays (log/slog/value.cs:24), nine call-site key literals materialized per call, three StringValue element references through unsafe.StringData, and two from slices.Grow’s make plus append (slices.cs:441). At go1.26.10 the test body changed and it reads 16 per run on windows and linux. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/logger.Info deferred wantAllocs assert (want 0) on Logger.Info(“hello”) through a discarding logger: Go allocates nothing. The converted call counts 2 golib-runtime objects per run that Go keeps off the heap: the local pcs array runtime.Callers writes into (log/slog/logger.cs:293/:315) and Record.front, a fixed array of managed elements (log/slog/record.cs:38). CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/logger.Log deferred wantAllocs assert (want 0) on Logger.Log(ctx, LevelDebug, “hello”) through a discarding logger: Go allocates nothing. The converted call counts 2 golib-runtime objects per run that Go keeps off the heap: the local pcs array runtime.Callers writes into (log/slog/logger.cs:293/:315) and Record.front, a fixed array of managed elements (log/slog/record.cs:38). CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAlloc/pairs deferred wantAllocs assert (want 0) on Logger.Info(“”, “error”, io.EOF): Go keeps the interface value and the record’s working state off the heap. At go1.24.13 the converted call counted 6 golib-runtime objects per run, three copies of the ...any parameter pack, the local pcs array runtime.Callers writes into, Record.front and the zero-length array a Value constructor initializes (log/slog/value.cs:24); at go1.26.10 the test body changed and it reads 3 per run on windows and linux. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing the arguments into any is not part of the reading.
TestAnyLevelAlloc deferred wantAllocs assert (want 0) on passing a Level through any: Go’s two-word interface value holds it without allocating. At go1.24.13 the counted object was the zero-length array AnyValue’s default arm initializes in the Value (log/slog/value.cs:24). At go1.26.10 golib’s counter charges no object on this path and the measurable figure is bytes, 24 per run on windows and linux: the boxed Level, which golib’s counter does not charge (AllocationCounter.cs:50-53).
TestAttrNoAlloc deferred Want-zero AllocsPerRun assert over the Attr constructors: Go’s Value stores the payload inline and allocates nothing. At go1.24.13 the converted path counted 14 golib-runtime objects per run: seven zero-length arrays the explicit Value constructors initialize (log/slog/value.cs:24), one StringValue element reference through unsafe.StringData, and 6 not yet attributed. At go1.26.10 it reads 1 per run on windows and linux (identical test body). CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53).
TestJSONAllocs aggregate no failure text of its own — the roll-up of this test’s disclosed subtests
TestJSONAllocs/attrs deferred wantAllocs(t, 1, …) over Logger.LogAttrs(ctx, LevelInfo, “hello world”, …) with five attributes – String, Int, Bool, Any over an error, Any over a three-field struct – through a JSONHandler writing to io.Discard; the test is new at go1.26.10. Go budgets exactly one allocation; the converted side counts 28 per run on windows and 26 on linux.
TestJSONAllocs/message deferred wantAllocs(t, 0, …) over Logger.LogAttrs(ctx, LevelInfo, “hello world”) with no attributes, through a JSONHandler writing to io.Discard; the test is new at go1.26.10. Go budgets zero allocations; the converted side counts 12 per run on windows and 10 on linux. Its parent TestJSONAllocs discloses as aggregate, with no entry of its own (plan §6).
TestTextHandlerAlloc deferred wantAllocs assert (want 0) on TextHandler.Handle: Go’s append-only formatting path allocates nothing. The converted handler counts golib-runtime objects per run, 20 at go1.24.13 and, at go1.26.10, 20 on windows and 19 on linux (identical test body); they are not yet attributed to sites. CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53), so boxing Values is not the cause.
TestValueNoAlloc deferred Want-zero AllocsPerRun assert over the Value constructors: Go’s Value stores the payload inline and allocates nothing. At go1.24.13 the converted path counted 15 golib-runtime objects per run: eight zero-length arrays the explicit Value constructors initialize (log/slog/value.cs:24), one StringValue element reference through unsafe.StringData, and 6 not yet attributed. At go1.26.10 it reads 1 per run on windows and linux (identical test body). CLR boxes and interface shells are not counted (AllocationCounter.cs:50-53).

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.