mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 12:59:04 +00:00
fix declref not writing to result loc
```zig
const a: i32 = 0;
const b: i32 = 1;
const c: i32 = 2;
const d: i32 = 3;
export fn entry(x: bool) i32 {
return if (x)
if (x)
a
else if (x)
b
else
c
else
d;
}
```
This commit is contained in:
parent
e6fa2ee706
commit
0d62c92947
@ -10,5 +10,3 @@ get an empty file compiling successfully (with no panic fn override)
|
||||
|
||||
uncomment all the behavior tests
|
||||
|
||||
look at all the ir_gen_node ir_gen_node_extra calls and make sure result locations are properly propagated
|
||||
return ir_gen_comptime(irb, scope, node, lval);
|
||||
|
||||
@ -3247,8 +3247,8 @@ struct IrInstructionTypeName {
|
||||
struct IrInstructionDeclRef {
|
||||
IrInstruction base;
|
||||
|
||||
Tld *tld;
|
||||
LVal lval;
|
||||
Tld *tld;
|
||||
};
|
||||
|
||||
struct IrInstructionPanic {
|
||||
|
||||
12
src/ir.cpp
12
src/ir.cpp
@ -4166,8 +4166,14 @@ static IrInstruction *ir_gen_symbol(IrBuilder *irb, Scope *scope, AstNode *node,
|
||||
}
|
||||
|
||||
Tld *tld = find_decl(irb->codegen, scope, variable_name);
|
||||
if (tld)
|
||||
return ir_build_decl_ref(irb, scope, node, tld, lval);
|
||||
if (tld) {
|
||||
IrInstruction *decl_ref = ir_build_decl_ref(irb, scope, node, tld, lval);
|
||||
if (lval == LValPtr) {
|
||||
return decl_ref;
|
||||
} else {
|
||||
return ir_expr_wrap(irb, scope, decl_ref, result_loc);
|
||||
}
|
||||
}
|
||||
|
||||
if (get_container_scope(node->owner)->any_imports_failed) {
|
||||
// skip the error message since we had a failing import in this file
|
||||
@ -16503,7 +16509,7 @@ static IrInstruction *ir_analyze_instruction_phi(IrAnalyze *ira, IrInstructionPh
|
||||
IrInstruction *branch_instruction = predecessor->instruction_list.pop();
|
||||
ir_set_cursor_at_end(&ira->new_irb, predecessor);
|
||||
IrInstruction *casted_value = ir_implicit_cast(ira, new_value, resolved_type);
|
||||
if (casted_value == ira->codegen->invalid_instruction) {
|
||||
if (type_is_invalid(casted_value->value.type)) {
|
||||
return ira->codegen->invalid_instruction;
|
||||
}
|
||||
new_incoming_values.items[i] = casted_value;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user