refactor(ffi-linkage): Phase 8 pre-cutover — migrate keyword-neutral diagnostic tests

Migrate the two #foreign-bearing diagnostic tests whose assertions survive the
cutover, with INTENTIONAL snapshot regens (reviewed):
- 1172 (foreign-symbol-conflict): decl '#foreign libc "getenv"' → 'extern libc
  "getenv"'. Still tests the dup-C-symbol conflict; the 'foreign symbol already
  bound' message is the keyword-neutral INTERNAL wording (renamed to 'extern symbol'
  in Phase 9.1), so it persists — only the echoed source line + caret moved.
- 1228 (non-transitive C-import visibility): its identity was the #foreign≡extern
  equivalence lock, now historical (structural via the A→B gate + unified AST). The
  identifier 'c_foreign_abs' itself contained 'foreign' (would fail the Phase 9.4
  gate), so converted c.sx/b.sx/main to two foreign-free extern symbols
  (c_abs_one/c_abs_two); still pins per-symbol non-transitive visibility.

Reverted the orthogonal 0→1-byte empty-stdout normalization on 1228/1231 (known
writeGolden idempotency quirk, not a behavior change). Suite green (647/444).
This commit is contained in:
agra
2026-06-15 07:34:23 +03:00
parent 2cce6a3a26
commit 720556b24e
6 changed files with 25 additions and 32 deletions

View File

@@ -1,5 +1,5 @@
error: foreign symbol 'getenv' is already bound with a different signature; two views of one C symbol must declare identical types
--> examples/1172-diagnostics-foreign-symbol-conflict.sx:9:41
--> examples/1172-diagnostics-foreign-symbol-conflict.sx:9:61
|
9 | getenv_opt :: (name: [:0]u8) -> ?[:0]u8 #foreign libc "getenv";
| ^^^^^^^^^^^^^^^^^^^^^^^
9 | getenv_opt :: (name: [:0]u8) -> ?[:0]u8 extern libc "getenv";
| ^

View File

@@ -1,11 +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
error: C function 'c_abs_one' not visible; add #import for the module that declares it
--> examples/1228-ffi-extern-c-non-transitive.sx:11:19
|
16 | print("{}\n", c_foreign_abs(-3));
| ^^^^^^^^^^^^^
11 | print("{}\n", c_abs_one(-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
error: C function 'c_abs_two' not visible; add #import for the module that declares it
--> examples/1228-ffi-extern-c-non-transitive.sx:12:19
|
17 | print("{}\n", c_extern_abs(-4));
| ^^^^^^^^^^^^
12 | print("{}\n", c_abs_two(-4));
| ^^^^^^^^^