]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Revert "Always initialize temp variables to fix fatal warnings of GCC 4.8"
authorRico Tzschichholz <ricotz@ubuntu.com>
Thu, 10 Nov 2016 08:21:19 +0000 (09:21 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Thu, 10 Nov 2016 08:21:19 +0000 (09:21 +0100)
This reverts commit eeb861dfba147bc37cfc7a9c22e1b582cf20ff31.

codegen/valaccodebasemodule.vala
vala/valalocalvariable.vala

index adccba732c67daa194d51af7b1a272673542c624..3921b0e68b3408cc0c9c54db5e600cfbdbd44939 100644 (file)
@@ -3471,27 +3471,32 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
        }
        
        public void emit_temp_var (LocalVariable local) {
+               var init = !(local.name.has_prefix ("*") || local.no_init);
                if (is_in_coroutine ()) {
                        closure_struct.add_field (get_ccode_name (local.variable_type), local.name);
 
                        // even though closure struct is zerod, we need to initialize temporary variables
                        // as they might be used multiple times when declared in a loop
 
-                       var initializer = default_value_for_type (local.variable_type, false);
-                       if (initializer == null) {
-                               cfile.add_include ("string.h");
-                               var memset_call = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
-                               memset_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression (local.name)));
-                               memset_call.add_argument (new CCodeConstant ("0"));
-                               memset_call.add_argument (new CCodeIdentifier ("sizeof (%s)".printf (get_ccode_name (local.variable_type))));
-                               ccode.add_expression (memset_call);
-                       } else {
-                               ccode.add_assignment (get_variable_cexpression (local.name), initializer);
+                       if (init) {
+                               var initializer = default_value_for_type (local.variable_type, false);
+                               if (initializer == null) {
+                                       cfile.add_include ("string.h");
+                                       var memset_call = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
+                                       memset_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression (local.name)));
+                                       memset_call.add_argument (new CCodeConstant ("0"));
+                                       memset_call.add_argument (new CCodeIdentifier ("sizeof (%s)".printf (get_ccode_name (local.variable_type))));
+                                       ccode.add_expression (memset_call);
+                               } else {
+                                       ccode.add_assignment (get_variable_cexpression (local.name), initializer);
+                               }
                        }
                } else {
                        var cvar = new CCodeVariableDeclarator (local.name, null, get_ccode_declarator_suffix (local.variable_type));
-                       cvar.initializer = default_value_for_type (local.variable_type, true);
-                       cvar.init0 = true;
+                       if (init) {
+                               cvar.initializer = default_value_for_type (local.variable_type, true);
+                               cvar.init0 = true;
+                       }
                        ccode.add_declaration (get_ccode_name (local.variable_type), cvar);
                }
        }
index a7979f74706ffb685d08a2c2a1b416d8edb2aaee..db172e382fdf686223089361a78872a40869c772 100644 (file)
@@ -30,7 +30,6 @@ public class Vala.LocalVariable : Variable {
 
        public bool captured { get; set; }
 
-       /* Currently ignored due to GCC 4.8 being strict on possibly uninitialized variables */
        public bool no_init { get; set; }
 
        /**