Cross-module example (main → b → c) referencing c's lib-less C imports transitively. The non-transitive C-import gate (lower/decl.zig c_import_bare) must police the legacy `#foreign` form and the new `extern` keyword IDENTICALLY — same 'C function not visible' diagnostic, not the generic top-level-name wording. Today the extern twin escapes the c_import_bare gate (body is an empty block, not foreign_expr) and is only caught by the general isNameVisible gate, yielding the generic message. Expected snapshot pins the DESIRED equivalent wording; the next commit aligns the gate to green it. Prerequisite for migrating the fn-decl `#foreign` path onto `extern`. 443/444 corpus (1228 xfail), 444 unit.
12 lines
464 B
Plaintext
12 lines
464 B
Plaintext
error: C function 'c_foreign_abs' not visible; add #import for the module that declares it
|
|
--> examples/1228-ffi-extern-c-non-transitive.sx:16:19
|
|
|
|
|
16 | print("{}\n", c_foreign_abs(-3));
|
|
| ^^^^^^^^^^^^^
|
|
|
|
error: C function 'c_extern_abs' not visible; add #import for the module that declares it
|
|
--> examples/1228-ffi-extern-c-non-transitive.sx:17:19
|
|
|
|
|
17 | print("{}\n", c_extern_abs(-4));
|
|
| ^^^^^^^^^^^^
|