Files
sx/examples/94-foreign-global-helper.sx
agra 831b46ac35 ffi 0.10: extend 94-foreign-global with cross-file companion
97/97 regression tests pass (94 expected updated; +issue-0037 from
the prior commit).

The companion `94-foreign-global-helper.sx` ALSO declares
`__stdinp : *void #foreign;`. Two sx files referencing the same
extern symbol must link cleanly — LLVM dedupes the named global at
the module level, and the C linker resolves both refs to the one
libSystem definition.

The full ergonomic story (helper computes the *same* address as the
main file's direct read) is blocked on issue-0037: lower.zig's
`address_of(global)` branch produces `undef` when the body is a
non-main function, even single-file. Once issue-0037 closes, fold
the helper's address back into an equality check here.

The cross-file link itself works today and is the lemma we're
locking in. This is also the closest thing today to the cross-file
extern-global ergonomic issue-0030 wants — `#foreign` already works
across files; the missing piece is sx-side `extern` decls for
sx-defined globals.
2026-05-19 12:06:08 +03:00

14 lines
520 B
Plaintext

// Companion module for examples/94-foreign-global.sx (PLAN-FFI 0.10).
// Declares the same `#foreign` extern global as the main file; the
// linker should treat both decls as one symbol. We deliberately don't
// READ `@__stdinp` from inside a helper fn body — that path is busted
// today (see examples/issue-0037.sx) — we just expose a trivial fn so
// this file participates in the link and the cross-file decl
// coexistence is exercised.
__stdinp : *void #foreign;
stdinp_addr_present :: () -> s32 {
1;
}