Files
sx/examples/issue-0006.sx
2026-03-05 16:20:36 +02:00

22 lines
730 B
Plaintext

// issue-0006: literal `0` in integer comparison inferred as float inside f32 ternary
//
// When `s64 != 0` is used as the condition of a ternary whose result type is f32,
// the literal `0` in the comparison leaks the ternary's f32 type instead of matching
// the LHS s64 type. This generates invalid LLVM IR:
// %icmp = icmp ne i64 %load, float 0.000000e+00
//
// The same comparison works fine in a regular if-statement.
#import "modules/std.sx";
main :: () -> void {
x : s64 = 42;
// OK: comparison in statement context
if x != 0 { out("ok\n"); }
// BUG: comparison as condition of f32 ternary — `0` inferred as f32
result : f32 = if x != 0 then 1.0 else 2.0;
print("result = {}\n", result);
}