]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ir.c
DEF_SAVEGLOBAL flag is now applied on initialized non-constant globals, and is not...
[xonotic/gmqcc.git] / ir.c
diff --git a/ir.c b/ir.c
index 73f574e6c37618b5309b51644bd72765d420ed18..b31c0629b25f25e8cb3756a6b969cee69cd69f08 100644 (file)
--- a/ir.c
+++ b/ir.c
@@ -3209,9 +3209,9 @@ static bool ir_builder_gen_global(ir_builder *self, ir_value *global, bool isloc
             vec_push(code_globals, *iptr);
         } else {
             vec_push(code_globals, 0);
-            if (!islocal)
-                def.type |= DEF_SAVEGLOBAL;
         }
+        if (!islocal && global->cvq != CV_CONST)
+            def.type |= DEF_SAVEGLOBAL;
         vec_push(code_defs, def);
 
         return global->code.globaladdr >= 0;
@@ -3223,9 +3223,9 @@ static bool ir_builder_gen_global(ir_builder *self, ir_value *global, bool isloc
             vec_push(code_globals, code_genstring(global->constval.vstring));
         } else {
             vec_push(code_globals, 0);
-            if (!islocal)
-                def.type |= DEF_SAVEGLOBAL;
         }
+        if (!islocal && global->cvq != CV_CONST)
+            def.type |= DEF_SAVEGLOBAL;
         vec_push(code_defs, def);
         return global->code.globaladdr >= 0;
     }
@@ -3238,21 +3238,19 @@ static bool ir_builder_gen_global(ir_builder *self, ir_value *global, bool isloc
             vec_push(code_globals, iptr[0]);
             if (global->code.globaladdr < 0)
                 return false;
-            for (d = 1; d < type_sizeof[global->vtype]; ++d)
-            {
+            for (d = 1; d < type_sizeof[global->vtype]; ++d) {
                 vec_push(code_globals, iptr[d]);
             }
         } else {
             vec_push(code_globals, 0);
             if (global->code.globaladdr < 0)
                 return false;
-            for (d = 1; d < type_sizeof[global->vtype]; ++d)
-            {
+            for (d = 1; d < type_sizeof[global->vtype]; ++d) {
                 vec_push(code_globals, 0);
             }
-            if (!islocal)
-                def.type |= DEF_SAVEGLOBAL;
         }
+        if (!islocal && global->cvq != CV_CONST)
+            def.type |= DEF_SAVEGLOBAL;
 
         vec_push(code_defs, def);
         return global->code.globaladdr >= 0;
@@ -3267,9 +3265,9 @@ static bool ir_builder_gen_global(ir_builder *self, ir_value *global, bool isloc
             vec_push(code_globals, vec_size(code_functions));
             if (!gen_global_function(self, global))
                 return false;
-            if (!islocal)
-                def.type |= DEF_SAVEGLOBAL;
         }
+        if (!islocal && global->cvq != CV_CONST)
+            def.type |= DEF_SAVEGLOBAL;
         vec_push(code_defs, def);
         return true;
     case TYPE_VARIANT: