Skip to content

All 410 iverilog rejections classified by construct: 36 classes, three cover 339, and three new emitter defects named #2998

Description

@gHashTag

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions