From 20cfff3d31acbc9b25dae4c2f33f0e12a3273003 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 11 Mar 2015 16:59:48 +0000 Subject: [PATCH] revert r231700 (designated initializer patch) which broke several projects. rdar://20120666. llvm-svn: 231939 --- clang/include/clang/AST/DeclObjC.h | 2 -- clang/include/clang/Sema/Sema.h | 3 +- clang/lib/AST/DeclObjC.cpp | 10 ------- clang/lib/Sema/SemaDeclObjC.cpp | 5 ++-- clang/lib/Sema/SemaObjCProperty.cpp | 8 ++---- clang/test/SemaObjC/attr-designated-init.m | 44 ++---------------------------- 6 files changed, 10 insertions(+), 62 deletions(-) diff --git a/clang/include/clang/AST/DeclObjC.h b/clang/include/clang/AST/DeclObjC.h index 46f3c7d..3c24d05 100644 --- a/clang/include/clang/AST/DeclObjC.h +++ b/clang/include/clang/AST/DeclObjC.h @@ -803,8 +803,6 @@ public: return hasDesignatedInitializers() || inheritsDesignatedInitializers(); } - bool hasDesignatedInitializersInSuperClass() const; - const ObjCProtocolList &getReferencedProtocols() const { assert(hasDefinition() && "Caller did not check for forward reference!"); if (data().ExternallyCompleted) diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 77a47b88..f0e356a 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -2926,7 +2926,8 @@ public: void DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D); void DiagnoseMissingDesignatedInitOverrides( - const ObjCImplementationDecl *ImplD); + const ObjCImplementationDecl *ImplD, + const ObjCInterfaceDecl *IFD); void DiagnoseDuplicateIvars(ObjCInterfaceDecl *ID, ObjCInterfaceDecl *SID); diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp index abd9b33..77995b5 100644 --- a/clang/lib/AST/DeclObjC.cpp +++ b/clang/lib/AST/DeclObjC.cpp @@ -1213,16 +1213,6 @@ bool ObjCInterfaceDecl::hasDesignatedInitializers() const { return data().HasDesignatedInitializers; } -bool ObjCInterfaceDecl::hasDesignatedInitializersInSuperClass() const { - ObjCInterfaceDecl *OSC = getSuperClass(); - while (OSC) { - if (OSC->hasDesignatedInitializers()) - return true; - OSC = OSC->getSuperClass(); - } - return false; -} - StringRef ObjCInterfaceDecl::getObjCRuntimeNameAsString() const { if (ObjCRuntimeNameAttr *ObjCRTName = getAttr()) diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index d958db58..33d9e95 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -2715,9 +2715,8 @@ Decl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef allMethods, AtomicPropertySetterGetterRules(IC, IDecl); DiagnoseOwningPropertyGetterSynthesis(IC); DiagnoseUnusedBackingIvarInAccessor(S, IC); - if (IDecl->hasDesignatedInitializers() || - IDecl->hasDesignatedInitializersInSuperClass()) - DiagnoseMissingDesignatedInitOverrides(IC); + if (IDecl->hasDesignatedInitializers()) + DiagnoseMissingDesignatedInitOverrides(IC, IDecl); bool HasRootClassAttr = IDecl->hasAttr(); if (IDecl->getSuperClass() == nullptr) { diff --git a/clang/lib/Sema/SemaObjCProperty.cpp b/clang/lib/Sema/SemaObjCProperty.cpp index 716fb50..f4f4336 100644 --- a/clang/lib/Sema/SemaObjCProperty.cpp +++ b/clang/lib/Sema/SemaObjCProperty.cpp @@ -1894,11 +1894,9 @@ void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D } void Sema::DiagnoseMissingDesignatedInitOverrides( - const ObjCImplementationDecl *ImplD) { - const ObjCInterfaceDecl *IFD = ImplD->getClassInterface(); - assert(IFD); - assert(IFD->hasDesignatedInitializers() || - IFD->hasDesignatedInitializersInSuperClass()); + const ObjCImplementationDecl *ImplD, + const ObjCInterfaceDecl *IFD) { + assert(IFD->hasDesignatedInitializers()); const ObjCInterfaceDecl *SuperD = IFD->getSuperClass(); if (!SuperD) return; diff --git a/clang/test/SemaObjC/attr-designated-init.m b/clang/test/SemaObjC/attr-designated-init.m index f990c35..a8673e1 100644 --- a/clang/test/SemaObjC/attr-designated-init.m +++ b/clang/test/SemaObjC/attr-designated-init.m @@ -39,7 +39,7 @@ __attribute__((objc_root_class)) @end @interface B1() --(id)initB3 NS_DESIGNATED_INITIALIZER; // expected-note 6 {{method marked as designated initializer of the class here}} +-(id)initB3 NS_DESIGNATED_INITIALIZER; // expected-note 4 {{method marked as designated initializer of the class here}} @end; @implementation B1 @@ -182,7 +182,7 @@ __attribute__((objc_root_class)) -(id)initB1; @end -@implementation SS4 // expected-warning {{method override for the designated initializer of the superclass '-initB3' not found}} +@implementation SS4 -(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} return 0; } @@ -233,7 +233,7 @@ __attribute__((objc_root_class)) -(id)initB1; @end -@implementation SS9 // expected-warning {{method override for the designated initializer of the superclass '-initB3' not found}} +@implementation SS9 -(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} return 0; } @@ -418,41 +418,3 @@ __attribute__((objc_root_class)) @interface CategoryForMissingInterface(Cat) // expected-error{{cannot find interface declaration}} - (instancetype)init NS_DESIGNATED_INITIALIZER; // expected-error{{only applies to init methods of interface or class extension declarations}} @end - -// rdar://19653785 -@class NSCoder; - -@interface NSView -- (instancetype)initWithFrame:(int)frameRect NS_DESIGNATED_INITIALIZER; // expected-note {{method marked as designated initializer of the class here}} -- (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER; // expected-note 2 {{method marked as designated initializer of the class here}} -@end - -@interface MyHappyView : NSView -- (instancetype)initWithFrame:(int)frameRect andOtherThing:(id)otherThing NS_DESIGNATED_INITIALIZER; -@end - -@implementation MyHappyView // expected-warning {{method override for the designated initializer of the superclass '-initWithCoder:' not found}} -- (instancetype)initWithFrame:(int)frameRect andOtherThing:(id)otherThing { - if (self = [super initWithFrame:frameRect]) { - } - return self; -} - -- (instancetype)initWithFrame:(int)frameRect { - return [self initWithFrame:frameRect andOtherThing:((void *)0)]; -} -@end - -@interface MySadView : NSView -@end - -@implementation MySadView // expected-warning {{method override for the designated initializer of the superclass '-initWithFrame:' not found}} \ - // expected-warning {{method override for the designated initializer of the superclass '-initWithCoder:' not found}} -- (instancetype)initWithFrame:(int)frameRect andOtherThing:(id)otherThing { - if (self = [super initWithFrame:frameRect]) { - } - - return self; -} -@end - -- 2.7.4