All 410 iverilog rejections, classified by construct: 36 classes, three cover 339
The sweep that produced #2987 left this stated as a gap in its own report — "I
did not open the offending lines, so that row is a message class awaiting the
same treatment the other rows got." This is that treatment, over the whole set.
Method: run t27c icarus-simulate on each of the 650 specs under specs/, keep
the generated .v and every diagnostic for the 410 that iverilog rejects, take
the first diagnostic per spec, and normalise away quoted identifiers, the
parenthesised scope and bare numbers so the CLASS survives.
specs whose iverilog run failed: 410 distinct classes: 36
156 No function named `X' found in this context (X)
106 <a bare `syntax error`, no message>
77 Unable to bind wire/reg/memory `X' in `X'
26 Could not find variable `X' in `X'
6 Enable of unknown task `X'
5 Unable to bind parameter `X' in `X'
3 the number of indices (N) is greater than the number of dimensions (N)
3 The argument to $signed must be a vector type
...
top 12 cover 386 of 410
The 156 "No function named", by which callee is missing
34 forward 26 init 11 parse 11 sort 5 pure
3 encode 3 compile 2 pow 2 abs 2 step
61 distinct callees
forward, init, parse, sort are not random: they are the functions a
struct-shaped spec calls on itself. The class is a call to a function the
Verilog backend did not emit, and 61 distinct names is a work list, not a wall.
The 106 bare syntax error, by the SHAPE of the offending line
Reading the line out of the generated .v rather than the message — 73 distinct
shapes, and the top ones are named constructs:
| shape |
specs |
what it is |
for (i = 0; i < (0 .. N); …) |
6 here, 38 corpus-wide |
a range literal in a bound — filed as #2997 |
reg [31:0] ; |
6 |
a register declaration with no name |
{32'dCOA verified successfully, 1'b1} |
7 |
a string literal forced into a sized decimal constant |
rtl ++ " // perturb: width-1" |
2 |
Zig's ++ concatenation emitted verbatim |
(latency_us < 1.0); |
2 |
a bare expression as a statement |
\bind (a, a) = … / bound = a.bind(b) |
2 |
bind is a Verilog keyword |
fmt_?_bits |
6 |
a ? surviving into an identifier |
Two of those are worth their own line
reg [31:0] ; — a declaration whose name is empty, in
igla/race/backend, igla/race/cordic_top, igla/race/systolic_array,
math/phi_split_optimality, math/phi_universal_attractor,
ml/transformer_feed_forward. Whatever produced the name produced nothing and
the emitter wrote the declaration anyway.
{32'dCOA verified successfully, 1'b1} — a string in a struct literal
lowered as a sized decimal, so the text lands inside 32'd…. Seven specs:
ar/coa_planning, ar/explainability, ar/proof_trace, config/paths,
config/schema, server/http, server/mdns. This is the Verilog half of the
class #2971 closed for C and Rust — two backends wrote every string literal as
a bare identifier — met a third time on a path that mangles rather than drops.
A correction to my own reading, recorded because it nearly shipped
My first classifier normalised quoted identifiers but not the parenthesised
scope, so every one of the 156 No function named lines became its own class —
198 classes, and that row never reached the top of the table. A coarser
truncating grep I ran first happened to group them correctly, and the two
readers disagreeing is what exposed it. Grouping by the diagnostic is not
grouping by the defect is already on this project's page; normalising too
little is the same error wearing the other sign.
Not established
Refs #2987, #2997, #2971, #2931
All 410 iverilog rejections, classified by construct: 36 classes, three cover 339
The sweep that produced #2987 left this stated as a gap in its own report — "I
did not open the offending lines, so that row is a message class awaiting the
same treatment the other rows got." This is that treatment, over the whole set.
Method: run
t27c icarus-simulateon each of the 650 specs underspecs/, keepthe generated
.vand every diagnostic for the 410 thativerilogrejects, takethe first diagnostic per spec, and normalise away quoted identifiers, the
parenthesised scope and bare numbers so the CLASS survives.
The 156 "No function named", by which callee is missing
forward,init,parse,sortare not random: they are the functions astruct-shaped spec calls on itself. The class is a call to a function theVerilog backend did not emit, and 61 distinct names is a work list, not a wall.
The 106 bare
syntax error, by the SHAPE of the offending lineReading the line out of the generated
.vrather than the message — 73 distinctshapes, and the top ones are named constructs:
for (i = 0; i < (0 .. N); …)reg [31:0] ;{32'dCOA verified successfully, 1'b1}rtl ++ " // perturb: width-1"++concatenation emitted verbatim(latency_us < 1.0);\bind (a, a) = …/bound = a.bind(b)bindis a Verilog keywordfmt_?_bits?surviving into an identifierTwo of those are worth their own line
reg [31:0] ;— a declaration whose name is empty, inigla/race/backend,igla/race/cordic_top,igla/race/systolic_array,math/phi_split_optimality,math/phi_universal_attractor,ml/transformer_feed_forward. Whatever produced the name produced nothing andthe emitter wrote the declaration anyway.
{32'dCOA verified successfully, 1'b1}— a string in a struct literallowered as a sized decimal, so the text lands inside
32'd…. Seven specs:ar/coa_planning,ar/explainability,ar/proof_trace,config/paths,config/schema,server/http,server/mdns. This is the Verilog half of theclass #2971 closed for C and Rust — two backends wrote every string literal as
a bare identifier — met a third time on a path that mangles rather than drops.
A correction to my own reading, recorded because it nearly shipped
My first classifier normalised quoted identifiers but not the parenthesised
scope, so every one of the 156
No function namedlines became its own class —198 classes, and that row never reached the top of the table. A coarser
truncating
grepI ran first happened to group them correctly, and the tworeaders disagreeing is what exposed it. Grouping by the diagnostic is not
grouping by the defect is already on this project's page; normalising too
little is the same error wearing the other sign.
Not established
spec carries many diagnostics; these are first diagnostics, and The C scaffold template is the largest lever in the project: +68 to +91 specs, and I measured it as zero #2931
measured what ranking by first error is worth when the median file carries
four or five families.
syntax errorlines are grouped by the shape of one line. Asyntax error is reported where the parser gave up, which is not always where
the construct is.
Refs #2987, #2997, #2971, #2931