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);