]> de.git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ir.c
Actually allocate a nil-vector for nil
[xonotic/gmqcc.git] / ir.c
diff --git a/ir.c b/ir.c
index 4e50d7f26b31db9c477d30de31ef90a94bfb5a2a..9f76892f67af0cd3be1c0015c3e4957127a1dd86 100644 (file)
--- a/ir.c
+++ b/ir.c
@@ -2932,6 +2932,8 @@ tailcall:
 
                 if (param->vtype == TYPE_FIELD)
                     stmt.opcode = field_store_instr[param->fieldtype];
+                else if (param->vtype == TYPE_NIL)
+                    stmt.opcode = INSTR_STORE_V;
                 else
                     stmt.opcode = type_store_instr[param->vtype];
                 stmt.o1.u1 = ir_value_code_addr(param);
@@ -2959,6 +2961,8 @@ tailcall:
 
                 if (param->vtype == TYPE_FIELD)
                     stmt.opcode = field_store_instr[param->fieldtype];
+                else if (param->vtype == TYPE_NIL)
+                    stmt.opcode = INSTR_STORE_V;
                 else
                     stmt.opcode = type_store_instr[param->vtype];
                 stmt.o1.u1 = ir_value_code_addr(param);
@@ -3639,6 +3643,12 @@ bool ir_builder_generate(ir_builder *self, const char *filename)
         }
     }
 
+    /* generate nil */
+    ir_value_code_setaddr(self->nil, vec_size(code_globals));
+    vec_push(code_globals, 0);
+    vec_push(code_globals, 0);
+    vec_push(code_globals, 0);
+
     /* generate global temps */
     self->first_common_globaltemp = vec_size(code_globals);
     for (i = 0; i < self->max_globaltemps; ++i) {