test(ffi-linkage): Phase 5.0 prereq — xfail lib-less extern/#foreign C-import visibility equivalence

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.
This commit is contained in:
agra
2026-06-14 20:47:48 +03:00
parent 47aaf3662a
commit 717c35d26d
6 changed files with 45 additions and 0 deletions

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1,11 @@
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));
| ^^^^^^^^^^^^