From 8180faf839a500f7ff9fb6c0ff29dd5b798aa1fa Mon Sep 17 00:00:00 2001 From: agra Date: Mon, 15 Jun 2026 07:40:12 +0300 Subject: [PATCH] =?UTF-8?q?test(ffi-linkage):=20Phase=208.0=20=E2=80=94=20?= =?UTF-8?q?xfail=20#foreign-removed=20rejection=20diagnostic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add examples/1176-diagnostics-foreign-removed.sx pinning the DESIRED Phase 8 cutover behavior: a bare '#foreign' decl must be rejected with a clear migration message ('#foreign has been removed; use the postfix extern/export'). RED — '#foreign' still parses (routes onto extern) so the decl compiles and exits 0 instead of erroring. The very next commit (8.1, parser hard-reject) greens it. --- examples/1176-diagnostics-foreign-removed.sx | 10 ++++++++++ .../expected/1176-diagnostics-foreign-removed.exit | 1 + .../expected/1176-diagnostics-foreign-removed.stderr | 5 +++++ .../expected/1176-diagnostics-foreign-removed.stdout | 0 4 files changed, 16 insertions(+) create mode 100644 examples/1176-diagnostics-foreign-removed.sx create mode 100644 examples/expected/1176-diagnostics-foreign-removed.exit create mode 100644 examples/expected/1176-diagnostics-foreign-removed.stderr create mode 100644 examples/expected/1176-diagnostics-foreign-removed.stdout diff --git a/examples/1176-diagnostics-foreign-removed.sx b/examples/1176-diagnostics-foreign-removed.sx new file mode 100644 index 0000000..d672c73 --- /dev/null +++ b/examples/1176-diagnostics-foreign-removed.sx @@ -0,0 +1,10 @@ +// Phase 8 (FFI-linkage) cutover: the prefix `#foreign` linkage directive has +// been removed. A declaration imports an external C symbol via the postfix +// `extern` keyword (or defines + exposes one via `export`). The parser rejects +// `#foreign` with a clear migration message instead of routing it onto `extern`. +// +// Expected: one error on the `#foreign` token; exit 1. + +abs_c :: (n: i32) -> i32 #foreign; + +main :: () -> i32 { 0 } diff --git a/examples/expected/1176-diagnostics-foreign-removed.exit b/examples/expected/1176-diagnostics-foreign-removed.exit new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/examples/expected/1176-diagnostics-foreign-removed.exit @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/examples/expected/1176-diagnostics-foreign-removed.stderr b/examples/expected/1176-diagnostics-foreign-removed.stderr new file mode 100644 index 0000000..051535c --- /dev/null +++ b/examples/expected/1176-diagnostics-foreign-removed.stderr @@ -0,0 +1,5 @@ +error: `#foreign` has been removed; use the postfix `extern` (import) / `export` (define) linkage keyword instead + --> examples/1176-diagnostics-foreign-removed.sx:8:26 + | + 8 | abs_c :: (n: i32) -> i32 #foreign; + | ^^^^^^^^ diff --git a/examples/expected/1176-diagnostics-foreign-removed.stdout b/examples/expected/1176-diagnostics-foreign-removed.stdout new file mode 100644 index 0000000..e69de29