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

37 lines
984 B
Plaintext

// issue-0013: += on global variables reads initial value instead of current value
//
// `g_counter += 1` compiles as `store(initial_value + 1)` instead of
// `store(load(g_counter) + 1)`. So it always produces the same result.
//
// Workaround: use `g_counter = g_counter + 1` instead of `g_counter += 1`
#import "modules/std.sx";
g_counter : s64 = 0;
tick :: () {
g_counter += 1;
print("counter={}\n", g_counter);
}
main :: () -> void {
// Test 1: += always produces 1 (BUG)
out("--- Test 1: += (broken) ---\n");
out("Expected: 1, 2, 3\n");
i : s64 = 0;
while i < 3 {
tick();
i += 1;
}
// Test 2: manual read-modify-write works correctly
out("--- Test 2: = x + 1 (works) ---\n");
out("Expected: 2, 3, 4\n");
g_counter = g_counter + 1;
print("counter={}\n", g_counter);
g_counter = g_counter + 1;
print("counter={}\n", g_counter);
g_counter = g_counter + 1;
print("counter={}\n", g_counter);
}