Add line SourceLocation to NSString checks.
Added test case to test warning about passing 'nil' to NSString's compare: method.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48896 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/BasicObjCFoundationChecks.cpp b/lib/Analysis/BasicObjCFoundationChecks.cpp
index d2a2dd6..d158067 100644
--- a/lib/Analysis/BasicObjCFoundationChecks.cpp
+++ b/lib/Analysis/BasicObjCFoundationChecks.cpp
@@ -43,7 +43,7 @@
   bool isNSString(ObjCInterfaceType* T, const char* suffix);
   bool AuditNSString(NodeTy* N, ObjCMessageExpr* ME);
       
-  void RegisterError(NodeTy* N, Expr* E, const char *msg);
+  void Warn(NodeTy* N, Expr* E, const char *msg);
 
 public:
   BasicObjCFoundationChecks(ASTContext& ctx, ValueStateManager* vmgr) 
@@ -112,7 +112,7 @@
 //===----------------------------------------------------------------------===//
 
 
-void BasicObjCFoundationChecks::RegisterError(NodeTy* N,
+void BasicObjCFoundationChecks::Warn(NodeTy* N,
                                               Expr* E, const char *msg) {
   
   Errors.push_back(AnnotatedPath<ValueState>());
@@ -135,7 +135,7 @@
     
     SourceRange R = AN.getExpr()->getSourceRange();
     
-    D.Report(diag, &AN.getString(), 1, &R, 1);
+    D.Report(L, diag, &AN.getString(), 1, &R, 1);
   }
 }
 
@@ -161,16 +161,30 @@
   //  lexical comparisons.
   
   std::string name = S.getName();
+  assert (!name.empty());
+  const char* cstr = &name[0];
+  unsigned len = name.size();
+  
+  
   ValueState* St = N->getState();
   
-  if (name == "compare:") {
-    // Check if the compared NSString is nil.
-    Expr * E = ME->getArg(0);
-    RVal X = GetRVal(St, E);
+  switch (len) {
+    default:
+      break;
+    case 8:
+      if (!strcmp(cstr, "compare:")) {
+        // Check if the compared NSString is nil.
+        Expr * E = ME->getArg(0);
     
-    if (isNil(X))
-      RegisterError(N, E,
-                    "Argument to NSString method 'compare:' cannot be nil.");
+        if (isNil(GetRVal(St, E))) {
+          Warn(N, E, "Argument to NSString method 'compare:' cannot be nil.");
+          return false;
+        }
+        
+        break;
+      }
+      
+      break;
   }
   
   return false;