diff --git a/clang/lib/Analysis/CocoaConventions.cpp b/clang/lib/Analysis/CocoaConventions.cpp
index 4d57623..b2d416c 100644
--- a/clang/lib/Analysis/CocoaConventions.cpp
+++ b/clang/lib/Analysis/CocoaConventions.cpp
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// This file implements cocoa naming convention analysis. 
+// This file implements cocoa naming convention analysis.
 //
 //===----------------------------------------------------------------------===//
 
@@ -34,15 +34,15 @@
       return false;
     RetTy = TD->getDecl()->getUnderlyingType();
   }
-  
+
   if (Name.empty())
     return false;
-  
+
   // Is the type void*?
   const PointerType* PT = RetTy->getAs<PointerType>();
   if (!(PT->getPointeeType().getUnqualifiedType()->isVoidType()))
     return false;
-  
+
   // Does the name start with the prefix?
   return Name.startswith(Prefix);
 }
@@ -66,32 +66,32 @@
 bool cocoa::isCocoaObjectRef(QualType Ty) {
   if (!Ty->isObjCObjectPointerType())
     return false;
-  
+
   const ObjCObjectPointerType *PT = Ty->getAs<ObjCObjectPointerType>();
-  
+
   // Can be true for objects with the 'NSObject' attribute.
   if (!PT)
     return true;
-  
+
   // We assume that id<..>, id, Class, and Class<..> all represent tracked
   // objects.
   if (PT->isObjCIdType() || PT->isObjCQualifiedIdType() ||
       PT->isObjCClassType() || PT->isObjCQualifiedClassType())
     return true;
-  
+
   // Does the interface subclass NSObject?
   // FIXME: We can memoize here if this gets too expensive.
   const ObjCInterfaceDecl *ID = PT->getInterfaceDecl();
-  
+
   // Assume that anything declared with a forward declaration and no
   // @interface subclasses NSObject.
   if (!ID->hasDefinition())
     return true;
-  
+
   for ( ; ID ; ID = ID->getSuperClass())
     if (ID->getIdentifier()->getName() == "NSObject")
       return true;
-  
+
   return false;
 }
 
@@ -101,11 +101,11 @@
   const IdentifierInfo *ident = fn->getIdentifier();
   if (!ident) return false;
   StringRef functionName = ident->getName();
-  
+
   StringRef::iterator it = functionName.begin();
   StringRef::iterator start = it;
   StringRef::iterator endI = functionName.end();
-    
+
   while (true) {
     // Scan for the start of 'create' or 'copy'.
     for ( ; it != endI ; ++it) {
@@ -124,7 +124,7 @@
     // Did we hit the end of the string?  If so, we didn't find a match.
     if (it == endI)
       return false;
-    
+
     // Scan for *lowercase* 'reate' or 'opy', followed by no lowercase
     // character.
     StringRef suffix = functionName.substr(it - start);
@@ -137,10 +137,10 @@
       // Keep scanning.
       continue;
     }
-    
+
     if (it == endI || !isLowercase(*it))
       return true;
-  
+
     // If we matched a lowercase character, it isn't the end of the
     // word.  Keep scanning.
   }
