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.
8 lines
229 B
Plaintext
8 lines
229 B
Plaintext
// Intermediate module: directly imports c.sx, so BOTH of c's lib-less
|
|
// C functions are legitimately visible here (the legal usage site).
|
|
#import "c.sx";
|
|
|
|
b_use :: () -> i32 {
|
|
return c_foreign_abs(-1) + c_extern_abs(-2);
|
|
}
|