diff --git a/src/ir.cpp b/src/ir.cpp index 34654760a4bbd7c7225db18c49f2d4d1f506b8dc..3793418972a19912d4be9a8c795d2805b977f056 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -5935,6 +5935,7 @@ static TypeTableEntry *ir_inline_bb(IrAnalyze *ira, IrInstruction *source_instru return ir_unreach_error(ira); } + old_bb->other = ira->old_irb.current_basic_block->other; ir_start_bb(ira, old_bb, ira->old_irb.current_basic_block); return ira->codegen->builtin_types.entry_unreachable; } diff --git a/test/cases/eval.zig b/test/cases/eval.zig index 31901edca000de7f0f2cba2d1c5dcdb1568a96fa..8e6f1dd09675a74ba4b1b4aa0649a0968d9ce1c9 100644 --- a/test/cases/eval.zig +++ b/test/cases/eval.zig @@ -191,3 +191,31 @@ fn testTryToTrickEvalWithRuntimeIf(b: bool) -> usize { return i; } } + +fn max(comptime T: type, a: T, b: T) -> T { + if (T == bool) { + return a || b; + } else if (a > b) { + return a; + } else { + return b; + } +} +fn letsTryToCompareBools(a: bool, b: bool) -> bool { + max(bool, a, b) +} +fn inlinedBlockAndRuntimeBlockPhi() { + @setFnTest(this); + + assert(letsTryToCompareBools(true, true)); + assert(letsTryToCompareBools(true, false)); + assert(letsTryToCompareBools(false, true)); + assert(!letsTryToCompareBools(false, false)); + + comptime { + assert(letsTryToCompareBools(true, true)); + assert(letsTryToCompareBools(true, false)); + assert(letsTryToCompareBools(false, true)); + assert(!letsTryToCompareBools(false, false)); + } +}