Commit 36828a2e6a

Andrew Kelley <superjoe30@gmail.com>
2018-09-04 18:50:02
fix incorrect variable ref count
regression introduced by e82cd53df483a
1 parent ff4591f
Changed files (2)
src/all_types.hpp
@@ -1806,7 +1806,6 @@ struct VariableTableEntry {
     IrExecutable *owner_exec;
     size_t ref_count;
     VarLinkage linkage;
-    IrInstruction *decl_instruction;
     uint32_t align_bytes;
 
     // In an inline loop, multiple variables may be created,
src/ir.cpp
@@ -1446,8 +1446,6 @@ 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;
 }
 
@@ -12433,8 +12431,6 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc
         return var->value->type;
     }
 
-    var->ref_count = 0;
-
     TypeTableEntry *explicit_type = nullptr;
     IrInstruction *var_type = nullptr;
     if (decl_var_instruction->var_type != nullptr) {
@@ -12503,6 +12499,7 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc
         VariableTableEntry *new_var = create_local_var(ira->codegen, var->decl_node, var->child_scope,
             &var->name, var->src_is_const, var->gen_is_const, var->shadowable, var->is_comptime, true);
         new_var->owner_exec = var->owner_exec;
+        new_var->align_bytes = var->align_bytes;
         if (var->mem_slot_index != SIZE_MAX) {
             ConstExprValue *vals = create_const_vals(1);
             new_var->mem_slot_index = ira->exec_context.mem_slot_list.length;
@@ -12513,6 +12510,9 @@ static TypeTableEntry *ir_analyze_instruction_decl_var(IrAnalyze *ira, IrInstruc
         var = new_var;
     }
 
+    // This must be done after possibly creating a new variable above
+    var->ref_count = 0;
+
     var->value->type = result_type;
     assert(var->value->type);