diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2020-09-08 18:16:45 +0200 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2020-09-10 18:04:11 +0200 |
commit | 27f698bde905c1c106f0404dc7d0df1819761ce7 (patch) | |
tree | 9738582dd620f8d87eaf53b1ad277ad133c9ab72 /gcc/d | |
parent | 29ff25e70671ce2046aab5cf89bf519ec6cf2bed (diff) | |
download | gcc-27f698bde905c1c106f0404dc7d0df1819761ce7.zip gcc-27f698bde905c1c106f0404dc7d0df1819761ce7.tar.gz gcc-27f698bde905c1c106f0404dc7d0df1819761ce7.tar.bz2 |
d: Don't warn about variables initialized with 'void'
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'.
Diffstat (limited to 'gcc/d')
-rw-r--r-- | gcc/d/decl.cc | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/gcc/d/decl.cc b/gcc/d/decl.cc index 8e4237d..59844bc 100644 --- a/gcc/d/decl.cc +++ b/gcc/d/decl.cc @@ -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); } } |