From 914ad1ec2eff4ea9061804ad0da9cde7dd6543b6 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 17 Sep 2019 22:30:49 -0400 Subject: [PATCH] fix peer result location with typed parent, ... ...runtime condition, comptime prongs. closes #3244 --- src/ir.cpp | 2 +- test/stage1/behavior/misc.zig | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ir.cpp b/src/ir.cpp index f29afdcf7b..ea9039a1b6 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -15198,7 +15198,7 @@ static IrInstruction *ir_resolve_result_raw(IrAnalyze *ira, IrInstruction *suspe } peer_parent->skipped = true; return ir_resolve_result(ira, suspend_source_instr, peer_parent->parent, - value_type, value, force_runtime, true, true); + value_type, value, force_runtime || !is_comptime, true, true); } if (peer_parent->resolved_type == nullptr) { diff --git a/test/stage1/behavior/misc.zig b/test/stage1/behavior/misc.zig index c122b18e0a..613bb9ac54 100644 --- a/test/stage1/behavior/misc.zig +++ b/test/stage1/behavior/misc.zig @@ -721,3 +721,23 @@ test "global variable assignment with optional unwrapping with var initialized t }; expect(global_foo.* == 1234); } + +test "peer result location with typed parent, runtime condition, comptime prongs" { + const S = struct { + fn doTheTest(arg: i32) i32 { + const st = Structy{ + .bleh = if (arg == 1) 1 else 1, + }; + + if (st.bleh == 1) + return 1234; + return 0; + } + + const Structy = struct { + bleh: i32, + }; + }; + expect(S.doTheTest(0) == 1234); + expect(S.doTheTest(1) == 1234); +}