tools: the capacity fixture must not speak one compiler's dialect - #3452
Merged
Conversation
Refs #3450 The gate went red on master minutes after it merged, and it was mine. The self-check asserted clang's exact wording, use of undeclared identifier and on the ubuntu runner `cc` is gcc, which says 'undefined_0' undeclared Same defect, other dialect, and the assertion read it as a broken compiler. It now asserts the IDENTIFIER -- `undefined_0` -- which every C compiler must name whatever its phrasing. The same change applies to the rustc, zig, iverilog and yosys fixtures, all of which were pinned to one vendor's prose. The graceful degradation worked in that same run: zig, iverilog and yosys were absent and were named as skipped rather than failing. The failure was one wrong line, not the shape. THE UNCAPPING FLAGS ARE NOT INTERCHANGEABLE, and the failure is the worse kind. gcc rejects `-ferror-limit`; clang ACCEPTS `-fmax-errors=0` AND IGNORES IT -- 20 of 50 planted errors, with no diagnostic about the flag. A flag that is accepted and ignored is worse than one that is refused, so `c_uncap_flag` picks by vendor and the self-check verifies the EFFECT rather than the spelling: the uncapped invocation must report all 50. The `cc (default)` row becomes informational rather than ratcheted. Its value is a property of the vendor -- clang stops at 20, gcc does not stop -- so a runner switching compilers must not turn the gate red. Controls, all re-run: a planted truncation exits 1; a one-compiler PATH passes while naming four skips; an empty PATH exits 2; and substituting the accepted-and-ignored flag fails the self-check. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gHashTag
enabled auto-merge (squash)
September 8, 2026 02:21
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
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.
Refs #3450
The gate I merged an hour ago went red on master, and it was mine.
The self-check asserted clang's exact wording:
On the ubuntu runner
ccis gcc, which says:Same defect, other dialect, and my assertion read it as a broken compiler. It
now asserts the identifier —
undefined_0— which every C compiler mustname whatever its phrasing. The rustc, zig, iverilog and yosys fixtures were
pinned to one vendor's prose too, and all five are fixed.
The graceful degradation worked in that same run:
zig,iverilogandyosyswere absent and were named as skipped rather than failing. Thefailure was one wrong line, not the shape.
The uncapping flags are not interchangeable, and the failure is the worse kind
-ferror-limit=0-fmax-errors=0A flag that is accepted and ignored is worse than one that is refused:
nothing in the output says so.
c_uncap_flag()picks by vendor, and theself-check verifies the effect rather than the spelling — the uncapped
invocation must report all 50.
cc (default)becomes informational rather than ratcheted: its value is aproperty of the vendor (clang stops at 20, gcc does not stop), so a runner
switching compilers must not turn the gate red.
Controls, all re-run