From 11cd6ea70a8ac074e47b4b0dbd6ef90034411b7f Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian <fjahanian@apple.com> Date: Tue, 11 Nov 2014 21:54:19 +0000 Subject: [PATCH] Revert r221702 until I address Richard Trieu's comments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221714 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Sema/Sema.h | 1 - lib/Sema/SemaChecking.cpp | 11 ---- lib/Sema/SemaExpr.cpp | 6 +- test/Analysis/logical-ops.c | 3 +- test/Sema/exprs.c | 6 +- test/Sema/warn-tautological-compare.c | 80 --------------------------- 6 files changed, 3 insertions(+), 104 deletions(-) diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h index aa039e3e47c..4ad7463767d 100644 --- a/include/clang/Sema/Sema.h +++ b/include/clang/Sema/Sema.h @@ -8033,7 +8033,6 @@ public: void DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullType, bool IsEqual, SourceRange Range); - void CheckAlwaysNonNullPointer(Expr *OrigExp); /// type checking for vector binary operators. QualType CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index fe47bfb12e9..ea4f3476b6c 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -6748,17 +6748,6 @@ void Sema::DiagnoseAlwaysNonNullPointer(Expr *E, << FixItHint::CreateInsertion(getLocForEndOfToken(E->getLocEnd()), "()"); } -void Sema::CheckAlwaysNonNullPointer(Expr *OrigExpr) { - if (const UnaryOperator *U = dyn_cast<UnaryOperator>(OrigExpr)) - if (U->getOpcode() == UO_LNot) - return CheckAlwaysNonNullPointer(U->getSubExpr()); - - Expr *E = OrigExpr->IgnoreParenImpCasts(); - QualType Source = E->getType(); - if (Source->isPointerType() || Source->canDecayToPointerType()) - DiagnoseAlwaysNonNullPointer(E, Expr::NPCK_NotNull, /*IsEqual*/ false, - SourceRange()); -} /// Diagnoses "dangerous" implicit conversions within the given /// expression (which is a full expression). Implements -Wconversion diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index a8429b92ed6..37a08cfb081 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -8413,10 +8413,7 @@ inline QualType Sema::CheckLogicalOperands( // C99 6.5.[13,14] if (!LHS.get()->getType()->isScalarType() || !RHS.get()->getType()->isScalarType()) return InvalidOperands(Loc, LHS, RHS); - - CheckAlwaysNonNullPointer(LHS.get()); - CheckAlwaysNonNullPointer(RHS.get()); - + return Context.IntTy; } @@ -12974,7 +12971,6 @@ ExprResult Sema::CheckBooleanCondition(Expr *E, SourceLocation Loc) { << T << E->getSourceRange(); return ExprError(); } - CheckAlwaysNonNullPointer(E); } return E; diff --git a/test/Analysis/logical-ops.c b/test/Analysis/logical-ops.c index 2a03d96c0cb..afaa2f10778 100644 --- a/test/Analysis/logical-ops.c +++ b/test/Analysis/logical-ops.c @@ -36,5 +36,4 @@ int between(char *x) { int undef(void) {} // expected-warning{{control reaches end of non-void function}} void useUndef(void) { 0 || undef(); } -void testPointer(void) { (void) (1 && testPointer && 0); } // expected-warning {{address of function 'testPointer' will always evaluate to 'true'}} \ - // expected-note {{prefix with the address-of operator to silence this warning}} +void testPointer(void) { (void) (1 && testPointer && 0); } diff --git a/test/Sema/exprs.c b/test/Sema/exprs.c index 17b1aa2851b..2fb17e4880c 100644 --- a/test/Sema/exprs.c +++ b/test/Sema/exprs.c @@ -244,10 +244,6 @@ void test22() { if ("help") (void) 0; - if (test22) // expected-warning {{address of function 'test22' will always evaluate to 'true'}} \ - // expected-note {{prefix with the address-of operator to silence this warning}} - (void) 0; - - if (&test22) + if (test22) (void) 0; } diff --git a/test/Sema/warn-tautological-compare.c b/test/Sema/warn-tautological-compare.c index 2856eddc7b0..e69de29bb2d 100644 --- a/test/Sema/warn-tautological-compare.c +++ b/test/Sema/warn-tautological-compare.c @@ -1,80 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only -verify %s -// rdar://18716393 - -extern int a[] __attribute__((weak)); -int b[] = {8,13,21}; -struct { - int x[10]; -} c; -const char str[] = "text"; - -void ignore() { - if (!a) {} -} -void test() { - if (!b) {} // expected-warning {{address of array 'b' will always evaluate to 'true'}} - if (b == 0) {} // expected-warning {{comparison of array 'b' equal to a null pointer is always false}} - if (!c.x) {} // expected-warning {{address of array 'c.x' will always evaluate to 'true'}} - if (c.x == 0) {} // expected-warning {{comparison of array 'c.x' equal to a null pointer is always false}} - if (!str) {} // expected-warning {{address of array 'str' will always evaluate to 'true'}} - if (0 == str) {} // expected-warning {{comparison of array 'str' equal to a null pointer is always false}} -} - -int array[2]; -int test1() -{ - if (!array) { // expected-warning {{address of array 'array' will always evaluate to 'true'}} - return array[0]; - } else if (array != 0) { // expected-warning {{comparison of array 'array' not equal to a null pointer is always true}} - return array[1]; - } - if (array == 0) // expected-warning {{comparison of array 'array' equal to a null pointer is always false}} - return 1; - return 0; -} - -#define NULL (void*)0 - -int test2(int* pointer, char ch, void * pv) { - if (!&pointer) { // expected-warning {{address of 'pointer' will always evaluate to 'true'}} - return 0; - } - - if (&pointer) { // expected-warning {{address of 'pointer' will always evaluate to 'true'}} - return 0; - } - - if (&pointer == NULL) {} // expected-warning {{comparison of address of 'pointer' equal to a null pointer is always false}} - - if (&pointer != NULL) {} // expected-warning {{comparison of address of 'pointer' not equal to a null pointer is always true}} - - return 1; -} - -void test3() { - if (array) { } // expected-warning {{address of array 'array' will always evaluate to 'true'}} - if (array != 0) {} // expected-warning {{comparison of array 'array' not equal to a null pointer is always true}} - if (!array) { } // expected-warning {{address of array 'array' will always evaluate to 'true'}} - if (array == 0) {} // expected-warning {{comparison of array 'array' equal to a null pointer is always false}} - - if (array[0] && - array) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}} - - if (array[0] || - array) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}} - - if (array[0] && - !array) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}} - if (array[0] || - !array) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}} - - if (array && // expected-warning {{address of array 'array' will always evaluate to 'true'}} - array[0]) {} - if (!array || // expected-warning {{address of array 'array' will always evaluate to 'true'}} - array[0]) {} - - if (array || // expected-warning {{address of array 'array' will always evaluate to 'true'}} - (!array && array[0])) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}} - } - - -- GitLab