mirror of
https://github.com/ziglang/zig.git
synced 2026-02-17 06:49:23 +00:00
fix compiler crash in a nullable if after an if in...
...a switch prong of a switch with 2 prongs in an else closes #656
This commit is contained in:
parent
f55fdc00fc
commit
c9e01412a4
@ -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) {
|
||||
|
||||
@ -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");
|
||||
|
||||
30
test/cases/bugs/656.zig
Normal file
30
test/cases/bugs/656.zig
Normal file
@ -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 => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user