A bodiless #builtin with a $T: Type param routes through monomorphization. When resolveBuiltin returned null for an unrecognized name, the builtin-body branch fell through to ensureTerminator's constInt(0) -- a silent-fallback default the CLAUDE.md REJECTED PATTERNS forbid. Emit a loud 'error: unknown #builtin <name>' diagnostic instead. Regression: examples/1189-diagnostics-unknown-builtin.sx
17 lines
640 B
Plaintext
17 lines
640 B
Plaintext
// A bodiless `#builtin` carrying a `$T: Type` parameter, whose name the
|
|
// compiler does not recognize, must fail LOUDLY with an "unknown #builtin"
|
|
// diagnostic — not silently evaluate to 0 (the CLAUDE.md silent-fallback
|
|
// pattern). The generic monomorphization path (monomorphizeFunction's
|
|
// builtin-body branch) now diagnoses an unresolved builtin name instead of
|
|
// falling through to `ensureTerminator`'s `constInt(0)`.
|
|
//
|
|
// Regression (issue 0144).
|
|
#import "modules/std.sx";
|
|
|
|
// `mystery` is not a recognized builtin.
|
|
mystery :: ($T: Type, x: T) -> T #builtin;
|
|
|
|
main :: () {
|
|
print("mystery(42) = {}\n", mystery(i64, 42));
|
|
}
|