NeXT: Emit correct properties for category.
 - Was emitting duplicates of class properties instead of the category
   properties.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55395 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index 9413d7e..60c5728 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -787,7 +787,14 @@
 void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) {
   unsigned Size = CGM.getTargetData().getABITypeSize(ObjCTypes.CategoryTy);
 
+  // FIXME: This is poor design, the OCD should have a pointer to the
+  // category decl. Additionally, note that Category can be null for
+  // the @implementation w/o an @interface case. Sema should just
+  // create one for us as it does for @implementation so everyone else
+  // can live life under a clear blue sky.
   const ObjCInterfaceDecl *Interface = OCD->getClassInterface();
+  const ObjCCategoryDecl *Category = 
+    Interface->FindCategoryDeclaration(OCD->getIdentifier());
   std::string ExtName(std::string(Interface->getName()) +
                       "_" +
                       OCD->getName());
@@ -821,9 +828,15 @@
                      Interface->protocol_begin(),
                      Interface->protocol_end());
   Values[5] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size);
-  Values[6] = EmitPropertyList(std::string("\01L_OBJC_$_PROP_LIST_") + ExtName,
-                               Interface->classprop_begin(),
-                               Interface->classprop_end());
+
+  // If there is no category @interface then there can be no properties.
+  if (Category) {
+    Values[6] = EmitPropertyList(std::string("\01L_OBJC_$_PROP_LIST_") + ExtName,
+                                 Category->classprop_begin(),
+                                 Category->classprop_end());
+  } else {
+    Values[6] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy);
+  }
   
   llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.CategoryTy,
                                                    Values);