// issue-0046 — nested comptime call + return: state leak from // outer `lowerComptimeCall` into the wrapper fn built by // `createComptimeFunction`. Without saving/restoring // `inline_return_target`, the wrapper inherits an inline-return // slot belonging to a different basic block; the interp executes // the wrapper and trips a null-pointer store at // `storeAtRawPtr`. // // Repro: comptime fn (`$x: s32`) whose body has BOTH a nested // comptime call (`print`) AND a `return X;` statement. Pre-fix: // interp panics. Post-fix: prints "inside" then "n=42". // // The pack-fn variant of the same bug (filed in the original // issue as face 2) was fixed earlier when step-2b moved pack-fn // calls off the inline path into the mono path. Plain comptime // fns stay on the inline path; their fix is the // `createComptimeFunction` state save/restore. #import "modules/std.sx"; helper :: ($x: s32) -> s64 { print("inside\n"); return 42; } main :: () -> s32 { n := helper(7); print("n={}\n", n); return 0; }