diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp
index 6629450..d85ee6b 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -1031,31 +1031,28 @@
                       IdentifierInfo *CategoryName, SourceLocation CategoryLoc,
                       IdentifierInfo **ProtoRefNames, unsigned NumProtoRefs) {
   ObjcInterfaceDecl *IDecl = getObjCInterfaceDecl(ClassName);
-  ObjcCategoryDecl *CDecl;
   
   /// Check that class of this category is already completely declared.
   if (!IDecl || IDecl->isForwardDecl()) {
     Diag(ClassLoc, diag::err_undef_interface, ClassName->getName());
     return 0;
   }
-  else {
-    CDecl = new ObjcCategoryDecl(AtInterfaceLoc, NumProtoRefs,
-                                 CategoryName);
-    CDecl->setClassInterface(IDecl);
-    /// Check for duplicate interface declaration for this category
-    ObjcCategoryDecl *CDeclChain;
-    for (CDeclChain = IDecl->getListCategories(); CDeclChain;
-         CDeclChain = CDeclChain->getNextClassCategory()) {
-      if (CDeclChain->getIdentifier() == CategoryName) {
-        Diag(CategoryLoc, diag::err_dup_category_def, ClassName->getName(),
-             CategoryName->getName());
-        break;
-      }
+  ObjcCategoryDecl *CDecl = new ObjcCategoryDecl(AtInterfaceLoc, NumProtoRefs,
+                                                 CategoryName);
+  CDecl->setClassInterface(IDecl);
+  /// Check for duplicate interface declaration for this category
+  ObjcCategoryDecl *CDeclChain;
+  for (CDeclChain = IDecl->getListCategories(); CDeclChain;
+       CDeclChain = CDeclChain->getNextClassCategory()) {
+    if (CDeclChain->getIdentifier() == CategoryName) {
+      Diag(CategoryLoc, diag::err_dup_category_def, ClassName->getName(),
+           CategoryName->getName());
+      break;
     }
-    if (!CDeclChain)
-      CDecl->insertNextClassCategory();
   }
-  
+  if (!CDeclChain)
+    CDecl->insertNextClassCategory();
+
   /// Check then save referenced protocols
   for (unsigned int i = 0; i != NumProtoRefs; i++) {
     ObjcProtocolDecl* RefPDecl = ObjcProtocols[ProtoRefNames[i]];
