From 39ee1f4b97053cdc080ddf3562cefc6bed2071a8 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 7 Feb 2020 16:31:52 -0500 Subject: [PATCH] fix invalid behavior tests from prev commit and fix "no-op casts" from incorrectly spilling --- src/analyze.cpp | 6 ++++++ test/stage1/behavior/async_fn.zig | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/analyze.cpp b/src/analyze.cpp index 155f017da9..70352a2c18 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -6369,6 +6369,12 @@ static Error resolve_async_frame(CodeGen *g, ZigType *frame_type) { // This instruction does its own spilling specially, or otherwise doesn't need it. continue; } + if (instruction->id == IrInstGenIdCast && + reinterpret_cast(instruction)->cast_op == CastOpNoop) + { + // The IR instruction exists only to change the type according to Zig. No spill needed. + continue; + } if (instruction->value->special != ConstValSpecialRuntime) continue; if (instruction->base.ref_count == 0) diff --git a/test/stage1/behavior/async_fn.zig b/test/stage1/behavior/async_fn.zig index c1e03f62cf..aa0f1f04e2 100644 --- a/test/stage1/behavior/async_fn.zig +++ b/test/stage1/behavior/async_fn.zig @@ -1336,7 +1336,7 @@ test "async function passed 0-bit arg after non-0-bit arg" { var global_int: i32 = 0; fn foo() void { - _ = async bar(1, .{}); + bar(1, .{}) catch unreachable; } fn bar(x: i32, args: var) anyerror!void { @@ -1345,7 +1345,7 @@ test "async function passed 0-bit arg after non-0-bit arg" { global_int = x; } }; - S.foo(); + _ = async S.foo(); resume S.global_frame; expect(S.global_int == 1); } @@ -1357,7 +1357,7 @@ test "async function passed align(16) arg after align(8) arg" { fn foo() void { var a: u128 = 99; - _ = async bar(10, .{a}); + bar(10, .{a}) catch unreachable; } fn bar(x: u64, args: var) anyerror!void { @@ -1367,7 +1367,7 @@ test "async function passed align(16) arg after align(8) arg" { global_int = args[0]; } }; - S.foo(); + _ = async S.foo(); resume S.global_frame; expect(S.global_int == 99); }