From b34a7bbf11c5318b98a015083220b3bd4ac6cac8 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sun, 20 Sep 2026 18:44:37 +0700 Subject: [PATCH] The raylib half of the sweep, and the let the note named --- FIX.org | 6 ++++++ test/test_flan.ml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/FIX.org b/FIX.org index 0956983..57a8b61 100644 --- a/FIX.org +++ b/FIX.org @@ -2629,6 +2629,12 @@ what was true when they were written. pure addition: widening.flan's own rows. Not one existing program's diagnostics, output or exit status moved. + The thirteen test programs that import ~vendor:raylib~ were not run either, + for the same reason, and got the same treatment as examples/ below: + ~check~'s diagnostics are identical on both sides, LLVM ~emit~ is + byte-identical, and the x86 difference is the prelude-line strings and + nothing else. + examples/ were *not run*. They link raylib and every one of them opens a real window on the author's desktop, so the comparison there is ~check~'s exit status and diagnostics plus a byte-diff of ~emit~ and ~emit --x86~. diff --git a/test/test_flan.ml b/test/test_flan.ml index 5ab3e21..1fea434 100644 --- a/test/test_flan.ml +++ b/test/test_flan.ml @@ -1003,6 +1003,12 @@ let () = arithmetic at u64 rather than defaulting the 1 to an i32. *) accepts "a literal still takes the other operand's type" "(defconst fnv u64 14695981039346656037) (defn f [] u64 (+ fnv 1))"; + (* The form DISCUSS.org's note named: an unannotated let of a u64 constant. + It binds a u64 and nothing about widening reaches it — a let with no type + has no expectation to widen against, and the constant is what it says. *) + accepts "an unannotated let of a u64 constant still binds a u64" + "(defconst fnv u64 14695981039346656037) \ + (defn f [] u64 (let [h fnv] (* h 2)))"; (* Shifts are the carve-out: the value's type decides and the count widens to it, never the reverse, because the result's width and the poison check both belong to the value. *)