Conversation
The third call-site of a class closed twice. `default_input()` and
`valid_input()` are TEMPLATE SCAFFOLD, not functions: 571 test blocks call them
and nothing in the tree defines either. Zig resolved this in W585, Verilog in
W660 -- whose comment names its sibling and stops there.
generates C 581
... and cc accepts it 174 -> 242 (26.8% -> 37.2%)
ALL FOUR accept 69 -> 115 (10.6% -> 17.7%)
Three defects in one four-line template, each needing its own answer:
1. `default_input()` -> a zero of the CONSUMER'S type. Verilog writes a bare `0`
because its bindings are already declared `reg` of the right width; C has no
such declaration and `__auto_type input = 0` is an `int`. Measured: a plain
`0` moved `call to undeclared function` 86 -> 13 and raised `incompatible
integer to pointer conversion` 0 -> 68, with the accept count UNCHANGED. The
type has to come from the consumer's declared parameter, as Zig recovers it.
2. `when result = f(input)` where `f` returns nothing -> emit the call, bind
nothing. `__auto_type` cannot deduce from `void`. Two spellings mean the same
thing here: an omitted return type leaves no `fn_return_types` entry, and an
explicit `-> void` leaves one whose value is "void". Checking only for
absence left 80 specs failing, all of which say it out loud.
3. `then result != undefined` -> assert nothing, and say so. `{0}` is a brace
initialiser, not an operand. Writing `0` would assert a claim the spec does
not make, and `(typeof(x)){0}` is still illegal for a struct because `!=`
does not apply to structs. The Zig backend's own comment records that these
tests "constrain the value not at all".
Each of the three produces a DIFFERENT cc message from the same construct, which
is why a census grouping by message text reported this family as worth zero
(#2931, skill 370).
172 seals re-sealed in the same commit, which is where that repair belongs.
Closes #2931
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
PR DashboardGenerated at: 2026-08-30 01:12:28 UTC
Summary
Seal Status
|
gHashTag
enabled auto-merge (squash)
August 30, 2026 01:13
Contributor
PR DashboardGenerated at: 2026-08-30 01:16:18 UTC
Summary
Seal Status
|
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The third call-site of a class closed twice.
generates C... and cc accepts itALL FOUR acceptdefault_input()andvalid_input()are template scaffold, not functions: 571test blocks call them and nothing in the tree defines either. Zig resolved it in
W585, Verilog in W660 — whose comment names its sibling and stops there. Nobody
grepped the C path (#2931).
Three defects in one four-line template
Each needs a different answer, and each was measured separately:
1 — the binding takes its type from the consumer. Verilog writes a bare
0because its bindings are already declared
regof the right width. C has no suchdeclaration:
__auto_type input = 0is anint. Measured with a plain0:The type comes from the consumer's declared parameter, the way Zig recovers it.
2 — a void consumer binds nothing.
__auto_typecannot deduce fromvoid.Two spellings mean the same thing: an omitted return type leaves no
fn_return_typesentry, an explicit-> voidleaves one saying"void".Checking only for absence left 80 specs failing, all of them saying it out
loud.
3 — the vacuous assertion is not invented.
{0}is a brace initialiser, notan operand. Writing
0would assert a claim the spec does not make;(typeof(x)){0}is still illegal for a struct because!=does not apply tostructs. The Zig backend's own comment records that these tests "constrain the
value not at all".
Why it read as worth zero
Each of the three produces a different cc message from the same
construct. A census grouping by message text — mine, last pass — sees three
independent families and concludes every file is broken several ways over. That
error and its correction are #2931 and skill §370.
Mutation-checked
a_value_returning_consumer_still_binds__auto_typea_scaffold_binding_is_typed_by_its_consumera_vacuous_assertion_is_not_invented172 seals re-sealed in this commit, which is where that repair belongs — the
last two passes each left master red on
seal-coverageby deferring it.Closes #2931