Commit e83cf6a454

Andrew Kelley <andrew@ziglang.org>
2021-05-14 01:48:24
Sema: detect and skip over elided instructions
It would be better if AstGen would actually omit these instructions rather than only marking them as elided, but that can be solved separately.
1 parent b109daa
Changed files (3)
src/Sema.zig
@@ -1461,6 +1461,11 @@ fn zirStoreToBlockPtr(sema: *Sema, block: *Scope.Block, inst: Zir.Inst.Index) In
     defer tracy.end();
 
     const bin_inst = sema.code.instructions.items(.data)[inst].bin;
+    if (bin_inst.lhs == .none) {
+        // This is an elided instruction, but AstGen was not smart enough
+        // to omit it.
+        return;
+    }
     const ptr = try sema.resolveInst(bin_inst.lhs);
     const value = try sema.resolveInst(bin_inst.rhs);
     const ptr_ty = try sema.mod.simplePtrType(sema.arena, value.ty, true, .One);
src/Zir.zig
@@ -484,6 +484,8 @@ pub const Inst = struct {
         /// Same as `store` but the type of the value being stored will be used to infer
         /// the block type. The LHS is the pointer to store to.
         /// Uses the `bin` union field.
+        /// If the pointer is none, it means this instruction has been elided in
+        /// AstGen, but AstGen was unable to actually omit it from the ZIR code.
         store_to_block_ptr,
         /// Same as `store` but the type of the value being stored will be used to infer
         /// the pointer type.
BRANCH_TODO
@@ -65,3 +65,5 @@
 
  * in SwitchProng resolve, make sure AST tree gets loaded.
    It will be unloaded if using cached ZIR.
+ 
+ * make AstGen smart enough to omit elided store_to_block_ptr instructions