fix(ir): precise oversized-dim diagnostic on the alias path (0083)
The stateless alias-registration array-dim path collapsed foldDimU32's distinct .too_large / .below_min outcomes into null, so an oversized type alias (Big :: [5000000000]s64) emitted the FALSE 'an array dimension is not a compile-time integer constant' message while the direct form correctly reported 'array dimension 5000000000 does not fit in u32'. Add program_index.reportDimError as the single source of dim-error wording (the stateful path now emits through it too) and type_bridge.foldArrayDim to surface the DimU32 reason at the alias-registration site. An oversized/negative alias dim now routes to reportDimError for the same precise message as the direct form; a genuinely non-const alias dim keeps the alias-specific message. Regression: examples/1131-diagnostics-array-dim-oversized-u32-alias.sx
This commit is contained in:
@@ -122,6 +122,27 @@
|
||||
> `program_index.foldDimU32` gate. Files: `src/ir/semantic_diagnostics.zig`,
|
||||
> `src/ir/lower.zig`, `src/ir/program_index.zig`, `src/ir/type_bridge.zig`.
|
||||
> Regression: `examples/0208-generics-value-param-type-function.sx`.
|
||||
>
|
||||
> **Diagnostic-accuracy parity (attempt 7).** The fold + layout were correct, but
|
||||
> the two paths still DIVERGED on the error MESSAGE for an oversized dim. The
|
||||
> direct form (`a : [5_000_000_000]s64`) reported the accurate "array dimension
|
||||
> 5000000000 does not fit in u32" (from the stateful `resolveArrayLen`, which
|
||||
> branches on `foldDimU32`'s `.too_large` / `.below_min` / `.not_const` variants),
|
||||
> but the type-ALIAS form (`Big :: [5_000_000_000]s64`) reported a FALSE "an array
|
||||
> dimension is not a compile-time integer constant" — because the stateless
|
||||
> `resolveArrayLen` collapsed every non-`.ok` `DimU32` to `null`, so the
|
||||
> alias-registration site had only one generic message to emit. Fix: a single
|
||||
> wording source `program_index.reportDimError(diag, span, DimU32)` now owns the
|
||||
> dim-error text; the stateful path emits through it, and the alias-registration
|
||||
> site re-folds a top-level array dim via the new `type_bridge.foldArrayDim`
|
||||
> (same shared `foldDimU32`) and routes a `.too_large` / `.below_min` result to
|
||||
> `reportDimError` — so an oversized alias dim now reports the SAME precise
|
||||
> message as the direct form. A genuinely non-const alias dim (`[get()]`) still
|
||||
> gets the alias-specific "not a compile-time integer constant" message (1129).
|
||||
> Files: `src/ir/program_index.zig`, `src/ir/type_bridge.zig`, `src/ir/lower.zig`.
|
||||
> Regression: `examples/1131-diagnostics-array-dim-oversized-u32-alias.sx`
|
||||
> (oversized dim via alias → "does not fit in u32", matching direct example 1130;
|
||||
> 1129 still proves the non-const path keeps the generic message).
|
||||
|
||||
## Symptom
|
||||
A fixed array whose dimension is a module-global integer constant (`N :: 16;
|
||||
|
||||
Reference in New Issue
Block a user