diff options
author | Ted Kremenek <kremenek@apple.com> | 2014-03-29 04:49:20 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2014-03-29 04:49:20 +0000 |
commit | ab57a1555acffbeddf98818007fb9dff0a56c619 (patch) | |
tree | e8c68d8927034945a55a5bca46390931e2b2858a /clang/lib/Analysis/ReachableCode.cpp | |
parent | 48fb4887064e047647453ac2cf9f7054ec8d6ecb (diff) | |
download | llvm-ab57a1555acffbeddf98818007fb9dff0a56c619.zip llvm-ab57a1555acffbeddf98818007fb9dff0a56c619.tar.gz llvm-ab57a1555acffbeddf98818007fb9dff0a56c619.tar.bz2 |
[-Wunreachable-code] Expand paren-suppression heuristic to C++/ObjC bools.
llvm-svn: 205074
Diffstat (limited to 'clang/lib/Analysis/ReachableCode.cpp')
-rw-r--r-- | clang/lib/Analysis/ReachableCode.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/clang/lib/Analysis/ReachableCode.cpp b/clang/lib/Analysis/ReachableCode.cpp index 7c8ea39..3cc8ae4 100644 --- a/clang/lib/Analysis/ReachableCode.cpp +++ b/clang/lib/Analysis/ReachableCode.cpp @@ -141,12 +141,15 @@ static bool isConfigurationValue(const Stmt *S, // Special case looking for the sigil '()' around an integer literal. if (const ParenExpr *PE = dyn_cast<ParenExpr>(S)) - return isConfigurationValue(PE->getSubExpr(), PP, SilenceableCondVal, - IncludeIntegers, true); + if (!PE->getLocStart().isMacroID()) + return isConfigurationValue(PE->getSubExpr(), PP, SilenceableCondVal, + IncludeIntegers, true); if (const Expr *Ex = dyn_cast<Expr>(S)) S = Ex->IgnoreParenCasts(); + bool IgnoreYES_NO = false; + switch (S->getStmtClass()) { case Stmt::CallExprClass: { const FunctionDecl *Callee = @@ -155,19 +158,21 @@ static bool isConfigurationValue(const Stmt *S, } case Stmt::DeclRefExprClass: return isConfigurationValue(cast<DeclRefExpr>(S)->getDecl(), PP); + case Stmt::ObjCBoolLiteralExprClass: + IgnoreYES_NO = true; + // Fallthrough. + case Stmt::CXXBoolLiteralExprClass: case Stmt::IntegerLiteralClass: { - const IntegerLiteral *E = cast<IntegerLiteral>(S); + const Expr *E = cast<Expr>(S); if (IncludeIntegers) { if (SilenceableCondVal && !SilenceableCondVal->getBegin().isValid()) *SilenceableCondVal = E->getSourceRange(); - return WrappedInParens || isExpandedFromConfigurationMacro(E, PP); + return WrappedInParens || isExpandedFromConfigurationMacro(E, PP, IgnoreYES_NO); } return false; } case Stmt::MemberExprClass: return isConfigurationValue(cast<MemberExpr>(S)->getMemberDecl(), PP); - case Stmt::ObjCBoolLiteralExprClass: - return isExpandedFromConfigurationMacro(S, PP, /* IgnoreYES_NO */ true); case Stmt::UnaryExprOrTypeTraitExprClass: return true; case Stmt::BinaryOperatorClass: { |