]> granicus.if.org Git - clang/commitdiff
This patch reverts r220496 which issues warning on comparing
authorFariborz Jahanian <fjahanian@apple.com>
Mon, 3 Nov 2014 17:03:07 +0000 (17:03 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Mon, 3 Nov 2014 17:03:07 +0000 (17:03 +0000)
parameters with nonnull attribute when comparison is always
true/false. Patch causes false positive when parameter is
modified in the function.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221163 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaChecking.cpp
test/Sema/nonnull.c

index 4cd831febe1de87640b365403635f7cfe2b0d278..6503aef324fbd25b72f3314527932a0a181a0bf3 100644 (file)
@@ -2507,10 +2507,6 @@ def warn_impcast_pointer_to_bool : Warning<
     "address of%select{| function| array}0 '%1' will always evaluate to "
     "'true'">,
     InGroup<PointerBoolConversion>;
-def warn_cast_nonnull_to_bool : Warning<
-    "nonnull parameter '%0' will always evaluate to "
-    "'true'">,
-    InGroup<PointerBoolConversion>;
 def warn_this_bool_conversion : Warning<
   "'this' pointer cannot be null in well-defined C++ code; pointer may be "
   "assumed to always convert to true">, InGroup<UndefinedBoolConversion>;
@@ -2523,10 +2519,6 @@ def warn_null_pointer_compare : Warning<
     "comparison of %select{address of|function|array}0 '%1' %select{not |}2"
     "equal to a null pointer is always %select{true|false}2">,
     InGroup<TautologicalPointerCompare>;
-def warn_nonnull_parameter_compare : Warning<
-    "comparison of nonnull parameter '%0' %select{not |}1"
-    "equal to a null pointer is always %select{true|false}1">,
-    InGroup<TautologicalPointerCompare>;
 def warn_this_null_compare : Warning<
   "'this' pointer cannot be null in well-defined C++ code; comparison may be "
   "assumed to always evaluate to %select{true|false}0">,
index 495fa3253e6c46a1b6999749264f51e0b669fc45..ea4f3476b6ce85e73698ef0ac50404850d3d6cc1 100644 (file)
@@ -6678,37 +6678,7 @@ void Sema::DiagnoseAlwaysNonNullPointer(Expr *E,
   // Weak Decls can be null.
   if (!D || D->isWeak())
     return;
-  // Check for parameter decl with nonnull attribute
-  if (ParmVarDecl* PV = dyn_cast<ParmVarDecl>(D)) {
-    if (FunctionDecl* FD = dyn_cast<FunctionDecl>(PV->getDeclContext())) {
-      unsigned NumArgs = FD->getNumParams();
-      llvm::SmallBitVector AttrNonNull(NumArgs);
-      for (const auto *NonNull : FD->specific_attrs<NonNullAttr>()) {
-        if (!NonNull->args_size()) {
-          AttrNonNull.set(0, NumArgs);
-          break;
-        }
-        for (unsigned Val : NonNull->args()) {
-          if (Val >= NumArgs)
-            continue;
-          AttrNonNull.set(Val);
-        }
-      }
-      if (!AttrNonNull.empty())
-        for (unsigned i = 0; i < NumArgs; ++i)
-          if (FD->getParamDecl(i) == PV && AttrNonNull[i]) {
-            std::string Str;
-            llvm::raw_string_ostream S(Str);
-            E->printPretty(S, nullptr, getPrintingPolicy());
-            unsigned DiagID = IsCompare ? diag::warn_nonnull_parameter_compare
-                                        : diag::warn_cast_nonnull_to_bool;
-            Diag(E->getExprLoc(), DiagID) << S.str() << E->getSourceRange()
-              << Range << IsEqual;
-            return;
-          }
-    }
-  }
-  
+    
   QualType T = D->getType();
   const bool IsArray = T->isArrayType();
   const bool IsFunction = T->isFunctionType();
index 53f94dd3a458fabd0bd1a23861d04673a2fd4015..3b654a889072ea638509e8622a46a5897c3135a1 100644 (file)
@@ -83,28 +83,3 @@ void redecl_test(void *p) {
   redecl(p, 0); // expected-warning{{null passed}}
   redecl(0, p); // expected-warning{{null passed}}
 }
-
-// rdar://18712242
-#define NULL (void*)0
-__attribute__((__nonnull__))
-int evil_nonnull_func(int* pointer, void * pv)
-{
-   if (pointer == NULL) {  // expected-warning {{comparison of nonnull parameter 'pointer' equal to a null pointer is always false}}
-     return 0;
-   } else {
-     return *pointer;
-   } 
-
-   if (pv == NULL) {} // expected-warning {{comparison of nonnull parameter 'pv' equal to a null pointer is always false}}
-}
-
-int another_evil_nonnull_func(int* pointer, char ch, void * pv) __attribute__((nonnull(1, 3)));
-int another_evil_nonnull_func(int* pointer, char ch, void * pv) {
-   if (pointer == NULL) { // expected-warning {{comparison of nonnull parameter 'pointer' equal to a null pointer is always false}}
-     return 0;
-   } else {
-     return *pointer;
-   } 
-
-   if (pv == NULL) {} // expected-warning {{comparison of nonnull parameter 'pv' equal to a null pointer is always false}}
-}