forked from OSchip/llvm-project
Don't crash if defining -dealloc in a category.
llvm-svn: 135054
This commit is contained in:
parent
61a9f2af9e
commit
dffafded6c
|
@ -220,11 +220,13 @@ namespace {
|
|||
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 @@ struct FinishARCDealloc : EHScopeStack::Cleanup {
|
|||
CGF.getContext().VoidTy,
|
||||
method->getSelector(),
|
||||
iface,
|
||||
/*is category*/ false,
|
||||
isCategory,
|
||||
self,
|
||||
/*is class msg*/ false,
|
||||
args,
|
||||
|
|
|
@ -1542,3 +1542,13 @@ void test54(int first, ...) {
|
|||
// CHECK: call void @objc_release
|
||||
// CHECK: ret void
|
||||
}
|
||||
|
||||
// PR10228
|
||||
@interface Test55Base @end
|
||||
@interface Test55 : Test55Base @end
|
||||
@implementation Test55 (Category)
|
||||
- (void) dealloc {}
|
||||
@end
|
||||
// CHECK: define internal void @"\01-[Test55(Category) dealloc]"(
|
||||
// CHECK-NOT: ret
|
||||
// CHECK: call void bitcast (i8* ({{%.*}}*, i8*, ...)* @objc_msgSendSuper2 to void ({{%.*}}*, i8*)*)(
|
||||
|
|
Loading…
Reference in New Issue