Don't crash if defining -dealloc in a category.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135054 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index f64ff97..426cca0 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -220,11 +220,13 @@
 struct FinishARCDealloc : EHScopeStack::Cleanup {
   void Emit(CodeGenFunction &CGF, Flags flags) {
     const ObjCMethodDecl *method = cast<ObjCMethodDecl>(CGF.CurCodeDecl);
-    const ObjCImplementationDecl *impl
-      = cast<ObjCImplementationDecl>(method->getDeclContext());
+
+    const ObjCImplDecl *impl = cast<ObjCImplDecl>(method->getDeclContext());
     const ObjCInterfaceDecl *iface = impl->getClassInterface();
     if (!iface->getSuperClass()) return;
 
+    bool isCategory = isa<ObjCCategoryImplDecl>(impl);
+
     // Call [super dealloc] if we have a superclass.
     llvm::Value *self = CGF.LoadObjCSelf();
 
@@ -233,7 +235,7 @@
                                                       CGF.getContext().VoidTy,
                                                       method->getSelector(),
                                                       iface,
-                                                      /*is category*/ false,
+                                                      isCategory,
                                                       self,
                                                       /*is class msg*/ false,
                                                       args,