diff --git a/examples/1231-ffi-extern-undeclared-lib.sx b/examples/1231-ffi-extern-undeclared-lib.sx new file mode 100644 index 0000000..8f540e0 --- /dev/null +++ b/examples/1231-ffi-extern-undeclared-lib.sx @@ -0,0 +1,19 @@ +// An `extern LIB "csym"` reference must name something real, exactly like +// its `#foreign LIB` twin (example 1620): `nosuchunit` names neither a +// #library constant nor a named `#import c` unit, so this is a compile-time +// diagnostic — the bogus library reference is caught BEFORE the symbol +// would silently resolve through whatever image happens to carry it. +// +// Regression (FFI-linkage Part B): `checkForeignRefs` validated only a +// `#foreign` (foreign_expr) library_ref and skipped the `extern` keyword's +// `extern_lib`, so a bogus `extern` lib reference compiled silently (the +// symbol resolved via the default image and ran). Prerequisite for +// migrating the fn-decl `#foreign` path onto `extern`. +#import "modules/std.sx"; + +c_abs :: (n: i32) -> i32 extern nosuchunit "abs"; + +main :: () -> i32 { + print("c_abs = {}\n", c_abs(-5)); + 0 +} diff --git a/examples/expected/1231-ffi-extern-undeclared-lib.exit b/examples/expected/1231-ffi-extern-undeclared-lib.exit new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/examples/expected/1231-ffi-extern-undeclared-lib.exit @@ -0,0 +1 @@ +1 diff --git a/examples/expected/1231-ffi-extern-undeclared-lib.stderr b/examples/expected/1231-ffi-extern-undeclared-lib.stderr new file mode 100644 index 0000000..f81012c --- /dev/null +++ b/examples/expected/1231-ffi-extern-undeclared-lib.stderr @@ -0,0 +1,5 @@ +error: extern library 'nosuchunit' is not declared; expected a #library constant or a named '#import c' unit + --> examples/1231-ffi-extern-undeclared-lib.sx:14:1 + | +14 | c_abs :: (n: i32) -> i32 extern nosuchunit "abs"; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/examples/expected/1231-ffi-extern-undeclared-lib.stdout b/examples/expected/1231-ffi-extern-undeclared-lib.stdout new file mode 100644 index 0000000..e69de29