aboutsummaryrefslogtreecommitdiff
path: root/gcc/d
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2020-09-08 18:16:45 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2020-09-10 18:04:11 +0200
commit27f698bde905c1c106f0404dc7d0df1819761ce7 (patch)
tree9738582dd620f8d87eaf53b1ad277ad133c9ab72 /gcc/d
parent29ff25e70671ce2046aab5cf89bf519ec6cf2bed (diff)
downloadgcc-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.cc35
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);
}
}