Add the exception for strings in logical and expressions to -Wstring-conversion
for C code.
llvm-svn: 222327
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index aa6bf17..91ba91e 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -6613,10 +6613,17 @@
continue;
AnalyzeImplicitConversions(S, ChildExpr, CC);
}
+
if (BO && BO->isLogicalOp()) {
- ::CheckBoolLikeConversion(S, BO->getLHS(), BO->getLHS()->getExprLoc());
- ::CheckBoolLikeConversion(S, BO->getRHS(), BO->getRHS()->getExprLoc());
+ Expr *SubExpr = BO->getLHS()->IgnoreParenImpCasts();
+ if (!IsLogicalAndOperator || !isa<StringLiteral>(SubExpr))
+ ::CheckBoolLikeConversion(S, SubExpr, SubExpr->getExprLoc());
+
+ SubExpr = BO->getRHS()->IgnoreParenImpCasts();
+ if (!IsLogicalAndOperator || !isa<StringLiteral>(SubExpr))
+ ::CheckBoolLikeConversion(S, SubExpr, SubExpr->getExprLoc());
}
+
if (const UnaryOperator *U = dyn_cast<UnaryOperator>(E))
if (U->getOpcode() == UO_LNot)
::CheckBoolLikeConversion(S, U->getSubExpr(), CC);