diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2017-10-14 01:30:49 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2017-10-14 01:30:49 +0000 |
commit | 819ec01ce369929bf1927d2185fd561ee8e32cde (patch) | |
tree | 5d266bc12bf45797aca848db9435956656be1a6f /clang/lib/Sema/SemaDecl.cpp | |
parent | aa4ea5fb45616fc9c0926b4c0fdac9ad579f097f (diff) | |
download | bcm5719-llvm-819ec01ce369929bf1927d2185fd561ee8e32cde.tar.gz bcm5719-llvm-819ec01ce369929bf1927d2185fd561ee8e32cde.zip |
[Sema] Warn about unused variables if we can constant evaluate the initializer.
If the variable construction can be constant evaluated it doesn't have
side effects, so removing it is always safe. We only try to evaluate
variables that are unused, there should be no impact on compile time.
Differential Revision: https://reviews.llvm.org/D38678
llvm-svn: 315787
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 31abdfa3f6c..e6f3aeae961 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -1723,7 +1723,8 @@ static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) { dyn_cast<CXXConstructExpr>(Init); if (Construct && !Construct->isElidable()) { CXXConstructorDecl *CD = Construct->getConstructor(); - if (!CD->isTrivial() && !RD->hasAttr<WarnUnusedAttr>()) + if (!CD->isTrivial() && !RD->hasAttr<WarnUnusedAttr>() && + !VD->evaluateValue()) return false; } } |