diff --git a/src/ir.cpp b/src/ir.cpp index 62b9545348..ce7d8dcedd 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -1191,6 +1191,8 @@ static IrInstruction *ir_build_var_decl(IrBuilder *irb, Scope *scope, AstNode *s if (align_value) ir_ref_instruction(align_value, irb->current_basic_block); ir_ref_instruction(init_value, irb->current_basic_block); + var->decl_instruction = &decl_var_instruction->base; + return &decl_var_instruction->base; } @@ -5108,9 +5110,7 @@ static IrInstruction *ir_gen_var_decl(IrBuilder *irb, Scope *scope, AstNode *nod if (init_value == irb->codegen->invalid_instruction) return init_value; - IrInstruction *result = ir_build_var_decl(irb, scope, node, var, type_instruction, align_value, init_value); - var->decl_instruction = result; - return result; + return ir_build_var_decl(irb, scope, node, var, type_instruction, align_value, init_value); } static IrInstruction *ir_gen_while_expr(IrBuilder *irb, Scope *scope, AstNode *node) { diff --git a/test/behavior.zig b/test/behavior.zig index da5b173e17..ecb8cf74c9 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -8,6 +8,7 @@ comptime { _ = @import("cases/bool.zig"); _ = @import("cases/bugs/394.zig"); _ = @import("cases/bugs/655.zig"); + _ = @import("cases/bugs/656.zig"); _ = @import("cases/cast.zig"); _ = @import("cases/const_slice_child.zig"); _ = @import("cases/defer.zig"); diff --git a/test/cases/bugs/656.zig b/test/cases/bugs/656.zig new file mode 100644 index 0000000000..70000c9efd --- /dev/null +++ b/test/cases/bugs/656.zig @@ -0,0 +1,30 @@ +const assert = @import("std").debug.assert; + +const PrefixOp = union(enum) { + Return, + AddrOf: Value, +}; + +const Value = struct { + align_expr: ?u32, +}; + +test "nullable if after an if in a switch prong of a switch with 2 prongs in an else" { + foo(false, true); +} + +fn foo(a: bool, b: bool) { + var prefix_op = PrefixOp { .AddrOf = Value { .align_expr = 1234 } }; + if (a) { + } else { + switch (prefix_op) { + PrefixOp.AddrOf => |addr_of_info| { + if (b) { } + if (addr_of_info.align_expr) |align_expr| { + assert(align_expr == 1234); + } + }, + PrefixOp.Return => {}, + } + } +}