d: Don't warn about variables initialized with 'void'
authorIain Buclaw <ibuclaw@gdcproject.org>
Tue, 8 Sep 2020 16:16:45 +0000 (18:16 +0200)
committerIain Buclaw <ibuclaw@gdcproject.org>
Thu, 10 Sep 2020 16:04:11 +0000 (18:04 +0200)
There is no problem with using `T var = void', it is if the variable
remains uninitialized on first use that a warning should be issued.

gcc/d/ChangeLog:

* decl.cc (DeclVisitor::visit (VarDeclaration *)): Don't warn about
variables initialized with 'void'.

gcc/d/decl.cc

index 8e4237dd0561d3227378e25f79bebd640670cfcb..59844bc8633e6448773c76bd4158fd9e83bc0821 100644 (file)
@@ -734,33 +734,24 @@ public:
           a check for isVarDeclaration() in DeclarationExp codegen.  */
        declare_local_var (d);
 
-       if (d->_init)
+       if (d->_init && !d->_init->isVoidInitializer ())
          {
            tree decl = get_symbol_decl (d);
 
-           if (!d->_init->isVoidInitializer ())
-             {
-               ExpInitializer *vinit = d->_init->isExpInitializer ();
-               Expression *ie = initializerToExpression (vinit);
-               tree exp = build_expr (ie);
-
-               /* Maybe put variable on list of things needing destruction.  */
-               if (d->needsScopeDtor ())
-                 {
-                   vec_safe_push (d_function_chain->vars_in_scope, decl);
-                   /* Force a TARGET_EXPR to add the corresponding cleanup.  */
-                   exp = force_target_expr (compound_expr (exp, decl));
-                   TARGET_EXPR_CLEANUP (exp) = build_expr (d->edtor);
-                 }
-
-               add_stmt (exp);
-             }
-           else if (d->size (d->loc) != 0)
+           ExpInitializer *vinit = d->_init->isExpInitializer ();
+           Expression *ie = initializerToExpression (vinit);
+           tree exp = build_expr (ie);
+
+           /* Maybe put variable on list of things needing destruction.  */
+           if (d->needsScopeDtor ())
              {
-               /* Zero-length arrays do not have an initializer.  */
-               warning (OPT_Wuninitialized, "uninitialized variable '%s'",
-                        d->ident ? d->ident->toChars () : "(no name)");
+               vec_safe_push (d_function_chain->vars_in_scope, decl);
+               /* Force a TARGET_EXPR to add the corresponding cleanup.  */
+               exp = force_target_expr (compound_expr (exp, decl));
+               TARGET_EXPR_CLEANUP (exp) = build_expr (d->edtor);
              }
+
+           add_stmt (exp);
          }
       }