diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -14723,7 +14723,7 @@ bool IsAddressOf = false; - if (UnaryOperator *UO = dyn_cast(E)) { + if (UnaryOperator *UO = dyn_cast(E->IgnoreParenCasts())) { if (UO->getOpcode() != UO_AddrOf) return; IsAddressOf = true; diff --git a/clang/test/Sema/conditional-expr.c b/clang/test/Sema/conditional-expr.c --- a/clang/test/Sema/conditional-expr.c +++ b/clang/test/Sema/conditional-expr.c @@ -86,7 +86,7 @@ int Postgresql(void) { char x; - return ((((&x) != ((void *) 0)) ? (*(&x) = ((char) 1)) : (void) ((void *) 0)), (unsigned long) ((void *) 0)); // expected-warning {{C99 forbids conditional expressions with only one void side}} + return ((((&x) != ((void *) 0)) ? (*(&x) = ((char) 1)) : (void) ((void *) 0)), (unsigned long) ((void *) 0)); // expected-warning {{comparison of address of 'x' not equal to a null pointer is always true}} } #define nil ((void*) 0) diff --git a/clang/test/Sema/warn-tautological-compare.c b/clang/test/Sema/warn-tautological-compare.c --- a/clang/test/Sema/warn-tautological-compare.c +++ b/clang/test/Sema/warn-tautological-compare.c @@ -93,3 +93,9 @@ x = array ? 1 : 0; // expected-warning {{address of array}} x = &x ? 1 : 0; // expected-warning {{address of 'x'}} } + +void test4(void) +{ +int *a = (void *) 0; +int b = (&a) == ((void *) 0); // expected-warning {{comparison of address of 'a' equal to a null pointer is always false}} +}