diff --git a/examples/1181-diagnostics-metatype-declare-never-defined.sx b/examples/1181-diagnostics-metatype-declare-never-defined.sx new file mode 100644 index 00000000..e1c6aa45 --- /dev/null +++ b/examples/1181-diagnostics-metatype-declare-never-defined.sx @@ -0,0 +1,14 @@ +// A `declare("X")` that is never completed by `define(handle, info)` is rejected +// loudly. `declare` mints an empty (undefined) nominal slot; without a matching +// `define` it has zero variants, which is never a usable type — sizing / +// constructing it would otherwise panic at codegen. The diagnostic names the +// type and points at the bare `declare` so the missing `define` is obvious. +#import "modules/std.sx"; +#import "modules/std/meta.sx"; + +Undef :: declare("Undef"); // never define()d + +main :: () -> i32 { + x : Undef = ---; + return 0; +} diff --git a/examples/expected/1181-diagnostics-metatype-declare-never-defined.exit b/examples/expected/1181-diagnostics-metatype-declare-never-defined.exit new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/examples/expected/1181-diagnostics-metatype-declare-never-defined.exit @@ -0,0 +1 @@ +1 diff --git a/examples/expected/1181-diagnostics-metatype-declare-never-defined.stderr b/examples/expected/1181-diagnostics-metatype-declare-never-defined.stderr new file mode 100644 index 00000000..e1397448 --- /dev/null +++ b/examples/expected/1181-diagnostics-metatype-declare-never-defined.stderr @@ -0,0 +1,5 @@ +error: type 'Undef' is declared but never defined — complete it with define(handle, info) + --> examples/1181-diagnostics-metatype-declare-never-defined.sx:9:10 + | + 9 | Undef :: declare("Undef"); // never define()d + | ^^^^^^^^^^^^^^^^ diff --git a/examples/expected/1181-diagnostics-metatype-declare-never-defined.stdout b/examples/expected/1181-diagnostics-metatype-declare-never-defined.stdout new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/examples/expected/1181-diagnostics-metatype-declare-never-defined.stdout @@ -0,0 +1 @@ +