diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 4 | ||||
| -rw-r--r-- | clang/test/Sema/warn-tautological-compare.c | 16 |
2 files changed, 17 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 550474107c0..55de70826bc 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -6685,11 +6685,11 @@ void AnalyzeImplicitConversions(Sema &S, Expr *OrigE, SourceLocation CC) { if (BO && BO->isLogicalOp()) { Expr *SubExpr = BO->getLHS()->IgnoreParenImpCasts(); if (!IsLogicalAndOperator || !isa<StringLiteral>(SubExpr)) - ::CheckBoolLikeConversion(S, SubExpr, SubExpr->getExprLoc()); + ::CheckBoolLikeConversion(S, SubExpr, BO->getExprLoc()); SubExpr = BO->getRHS()->IgnoreParenImpCasts(); if (!IsLogicalAndOperator || !isa<StringLiteral>(SubExpr)) - ::CheckBoolLikeConversion(S, SubExpr, SubExpr->getExprLoc()); + ::CheckBoolLikeConversion(S, SubExpr, BO->getExprLoc()); } if (const UnaryOperator *U = dyn_cast<UnaryOperator>(E)) diff --git a/clang/test/Sema/warn-tautological-compare.c b/clang/test/Sema/warn-tautological-compare.c index 2856eddc7b0..247e7406398 100644 --- a/clang/test/Sema/warn-tautological-compare.c +++ b/clang/test/Sema/warn-tautological-compare.c @@ -77,4 +77,18 @@ void test3() { (!array && array[0])) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}} } - +// rdar://19256338 +#define SAVE_READ(PTR, RESULT) if( (PTR) && *(PTR) ) *RESULT=*PTR; + +// Source +typedef unsigned char Boolean; +struct HTTPClientPrivate +{ + Boolean readSuspended; +}; +typedef struct HTTPClientPrivate * HTTPClientRef; +static void _HTTPClientErrorHandler( HTTPClientRef me) +{ + Boolean result; + SAVE_READ(&me->readSuspended, &result); +} |

