The count description claimed every count must be "positive integral", which is wrong: zero is context-dependent. Verified at HEAD — an array dimension (`[0]s64`) and a generic value-param count (`Box(0)`, $N:u32) both accept zero as a length-0 instantiation, while a `Vector` lane count stays strictly positive (`Vector(0,f32)` rejected). Negatives are rejected for array dims and unsigned value-params, but a signed value-param accepts a negative; only the integral requirement (folds 4.0, rejects 4.5) is common to all three. Split the count paragraph into per-consumer bullets stating the exact range each accepts. Range-bound paragraph unchanged. Pin the zero contrast with examples 0147 (array-dim + value-param zero accepted) and 1505 (Vector zero-lane rejected). No compiler-code change.
16 lines
620 B
Plaintext
16 lines
620 B
Plaintext
// A zero `Vector` lane count is rejected — a vector must have at least one lane
|
|
// (strictly positive). Contrast with an array dimension / value-param count,
|
|
// where zero is a valid length-0 instantiation (see 0147). This pins the
|
|
// zero-rejecting half of the context-dependent count rule (specs.md, Array
|
|
// Types).
|
|
//
|
|
// Regression (F0.4 attempt 12): the spec now states the zero rule per consumer;
|
|
// the `Vector` lane count stays strictly positive while array dims / value-param
|
|
// counts accept zero.
|
|
#import "modules/std.sx";
|
|
|
|
main :: () {
|
|
v : Vector(0, f32) = ---;
|
|
print("unreachable: {}\n", v.x);
|
|
}
|