зеркало из https://github.com/microsoft/clang-1.git
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
This commit is contained in:
Родитель
48218c60d6
Коммит
799d34e950
|
@ -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*)*)(
|
||||
|
|
Загрузка…
Ссылка в новой задаче