From e1e789ac0249149a4aa1671f5f9260d488cb617a Mon Sep 17 00:00:00 2001 From: _ov4 Date: Fri, 16 Oct 2026 20:57:23 +0800 Subject: test(compiler): expose minimum integer literal corruption Check the minimum i64 value as a source literal as well as input. Both execution paths currently change it by one without a diagnostic. Co-Authored-By: Claude Fable 5.1 --- tests/i/integer-boundaries/expected.txt | 1 + tests/i/integer-boundaries/notes.md | 2 ++ tests/i/integer-boundaries/program.cps | 1 + 3 files changed, 4 insertions(+) (limited to 'tests/i') diff --git a/tests/i/integer-boundaries/expected.txt b/tests/i/integer-boundaries/expected.txt index 5fd67df..b7eb7b8 100644 --- a/tests/i/integer-boundaries/expected.txt +++ b/tests/i/integer-boundaries/expected.txt @@ -5,3 +5,4 @@ -1 TRUE:TRUE:TRUE 9223372036854775807:-9223372036854775808:0 +-9223372036854775808 diff --git a/tests/i/integer-boundaries/notes.md b/tests/i/integer-boundaries/notes.md index b89da97..0a8f6c5 100644 --- a/tests/i/integer-boundaries/notes.md +++ b/tests/i/integer-boundaries/notes.md @@ -5,3 +5,5 @@ Human review: pending. Expected output was independently traced by AI, not captu Basis: Project INTEGER=i64 contract; CIE pp. 7 and 15 do not specify bit width or overflow. Trace: Inputs are 2^63-1 and -2^63. Every operation stays in range; their sum is -1 and division by 1 preserves both values. + +The final line independently exercises the minimum INTEGER as a source literal, rather than only through INPUT. Its exact value must also be -2^63; parsing its positive magnitude before applying unary minus must not silently change the value. diff --git a/tests/i/integer-boundaries/program.cps b/tests/i/integer-boundaries/program.cps index c08b658..a4aec33 100644 --- a/tests/i/integer-boundaries/program.cps +++ b/tests/i/integer-boundaries/program.cps @@ -9,3 +9,4 @@ OUTPUT Lo + 1 OUTPUT Hi + Lo OUTPUT Lo < 0, ":", Hi > 0, ":", Lo < Hi OUTPUT Hi DIV 1, ":", Lo DIV 1, ":", Lo MOD 1 +OUTPUT -9223372036854775808 -- cgit v1.3.1-4-g156e