1*0a6a1f1dSLionel Sambuc// RUN: %clang_cc1 -fsyntax-only -Wno-incomplete-implementation -verify -fblocks %s 2*0a6a1f1dSLionel Sambuc 3*0a6a1f1dSLionel Sambuc#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 4*0a6a1f1dSLionel Sambuc 5*0a6a1f1dSLionel Sambucvoid fnfoo(void) NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}} 6*0a6a1f1dSLionel Sambuc 7*0a6a1f1dSLionel Sambuc@protocol P1 8*0a6a1f1dSLionel Sambuc-(id)init NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}} 9*0a6a1f1dSLionel Sambuc@end 10*0a6a1f1dSLionel Sambuc 11*0a6a1f1dSLionel Sambuc__attribute__((objc_root_class)) 12*0a6a1f1dSLionel Sambuc@interface I1 13*0a6a1f1dSLionel Sambuc-(void)meth NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}} 14*0a6a1f1dSLionel Sambuc-(id)init NS_DESIGNATED_INITIALIZER; 15*0a6a1f1dSLionel Sambuc+(id)init NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}} 16*0a6a1f1dSLionel Sambuc@end 17*0a6a1f1dSLionel Sambuc 18*0a6a1f1dSLionel Sambuc@interface I1(cat) 19*0a6a1f1dSLionel Sambuc-(id)init2 NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}} 20*0a6a1f1dSLionel Sambuc@end 21*0a6a1f1dSLionel Sambuc 22*0a6a1f1dSLionel Sambuc@interface I1() 23*0a6a1f1dSLionel Sambuc-(id)init3 NS_DESIGNATED_INITIALIZER; 24*0a6a1f1dSLionel Sambuc@end 25*0a6a1f1dSLionel Sambuc 26*0a6a1f1dSLionel Sambuc@implementation I1 27*0a6a1f1dSLionel Sambuc-(void)meth {} 28*0a6a1f1dSLionel Sambuc-(id)init NS_DESIGNATED_INITIALIZER { return 0; } // expected-error {{only applies to init methods of interface or class extension declarations}} 29*0a6a1f1dSLionel Sambuc+(id)init { return 0; } 30*0a6a1f1dSLionel Sambuc-(id)init3 { return 0; } 31*0a6a1f1dSLionel Sambuc-(id)init4 NS_DESIGNATED_INITIALIZER { return 0; } // expected-error {{only applies to init methods of interface or class extension declarations}} \ 32*0a6a1f1dSLionel Sambuc // expected-warning {{convenience initializer missing a 'self' call to another initializer}} 33*0a6a1f1dSLionel Sambuc@end 34*0a6a1f1dSLionel Sambuc 35*0a6a1f1dSLionel Sambuc__attribute__((objc_root_class)) 36*0a6a1f1dSLionel Sambuc@interface B1 37*0a6a1f1dSLionel Sambuc-(id)initB1 NS_DESIGNATED_INITIALIZER; // expected-note 6 {{method marked as designated initializer of the class here}} 38*0a6a1f1dSLionel Sambuc-(id)initB2; 39*0a6a1f1dSLionel Sambuc@end 40*0a6a1f1dSLionel Sambuc 41*0a6a1f1dSLionel Sambuc@interface B1() 42*0a6a1f1dSLionel Sambuc-(id)initB3 NS_DESIGNATED_INITIALIZER; // expected-note 4 {{method marked as designated initializer of the class here}} 43*0a6a1f1dSLionel Sambuc@end; 44*0a6a1f1dSLionel Sambuc 45*0a6a1f1dSLionel Sambuc@implementation B1 46*0a6a1f1dSLionel Sambuc-(id)initB1 { return 0; } 47*0a6a1f1dSLionel Sambuc-(id)initB2 { return 0; } // expected-warning {{convenience initializer missing a 'self' call to another initializer}} 48*0a6a1f1dSLionel Sambuc-(id)initB3 { return 0; } 49*0a6a1f1dSLionel Sambuc@end 50*0a6a1f1dSLionel Sambuc 51*0a6a1f1dSLionel Sambuc@interface S1 : B1 52*0a6a1f1dSLionel Sambuc-(id)initS1 NS_DESIGNATED_INITIALIZER; // expected-note {{method marked as designated initializer of the class here}} 53*0a6a1f1dSLionel Sambuc-(id)initS2 NS_DESIGNATED_INITIALIZER; 54*0a6a1f1dSLionel Sambuc-(id)initS3 NS_DESIGNATED_INITIALIZER; // expected-note 2 {{method marked as designated initializer of the class here}} 55*0a6a1f1dSLionel Sambuc-(id)initB1; 56*0a6a1f1dSLionel Sambuc@end 57*0a6a1f1dSLionel Sambuc 58*0a6a1f1dSLionel Sambuc@interface S1() 59*0a6a1f1dSLionel Sambuc-(id)initS4 NS_DESIGNATED_INITIALIZER; // expected-note 2 {{method marked as designated initializer of the class here}} 60*0a6a1f1dSLionel Sambuc@end 61*0a6a1f1dSLionel Sambuc 62*0a6a1f1dSLionel Sambuc@implementation S1 63*0a6a1f1dSLionel Sambuc-(id)initS1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 64*0a6a1f1dSLionel Sambuc return 0; 65*0a6a1f1dSLionel Sambuc} 66*0a6a1f1dSLionel Sambuc-(id)initS2 { 67*0a6a1f1dSLionel Sambuc return [super initB1]; 68*0a6a1f1dSLionel Sambuc} 69*0a6a1f1dSLionel Sambuc-(id)initS3 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 70*0a6a1f1dSLionel Sambuc return [super initB2]; // expected-warning {{designated initializer invoked a non-designated initializer}} 71*0a6a1f1dSLionel Sambuc} 72*0a6a1f1dSLionel Sambuc-(id)initS4 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 73*0a6a1f1dSLionel Sambuc return [self initB1]; // expected-warning {{designated initializer should only invoke a designated initializer on 'super'}} 74*0a6a1f1dSLionel Sambuc} 75*0a6a1f1dSLionel Sambuc-(id)initB1 { 76*0a6a1f1dSLionel Sambuc return [self initS1]; 77*0a6a1f1dSLionel Sambuc} 78*0a6a1f1dSLionel Sambuc-(id)initB3 { 79*0a6a1f1dSLionel Sambuc return [self initS1]; 80*0a6a1f1dSLionel Sambuc} 81*0a6a1f1dSLionel Sambuc@end 82*0a6a1f1dSLionel Sambuc 83*0a6a1f1dSLionel Sambuc@interface S2 : B1 84*0a6a1f1dSLionel Sambuc-(id)initB1; 85*0a6a1f1dSLionel Sambuc@end 86*0a6a1f1dSLionel Sambuc 87*0a6a1f1dSLionel Sambuc@interface SS2 : S2 88*0a6a1f1dSLionel Sambuc-(id)initSS1 NS_DESIGNATED_INITIALIZER; 89*0a6a1f1dSLionel Sambuc@end 90*0a6a1f1dSLionel Sambuc 91*0a6a1f1dSLionel Sambuc@implementation SS2 // expected-warning {{method override for the designated initializer of the superclass '-initB1' not found}} \ 92*0a6a1f1dSLionel Sambuc // expected-warning {{method override for the designated initializer of the superclass '-initB3' not found}} 93*0a6a1f1dSLionel Sambuc-(id)initSS1 { 94*0a6a1f1dSLionel Sambuc return [super initB1]; 95*0a6a1f1dSLionel Sambuc} 96*0a6a1f1dSLionel Sambuc@end 97*0a6a1f1dSLionel Sambuc 98*0a6a1f1dSLionel Sambuc@interface S3 : B1 99*0a6a1f1dSLionel Sambuc-(id)initS1 NS_DESIGNATED_INITIALIZER; // expected-note {{method marked as designated initializer of the class here}} 100*0a6a1f1dSLionel Sambuc@end 101*0a6a1f1dSLionel Sambuc 102*0a6a1f1dSLionel Sambuc@interface SS3 : S3 103*0a6a1f1dSLionel Sambuc-(id)initSS1 NS_DESIGNATED_INITIALIZER; // expected-note 2 {{method marked as designated initializer of the class here}} 104*0a6a1f1dSLionel Sambuc@end 105*0a6a1f1dSLionel Sambuc 106*0a6a1f1dSLionel Sambuc@implementation SS3 // expected-warning {{method override for the designated initializer of the superclass '-initS1' not found}} 107*0a6a1f1dSLionel Sambuc-(id)initSS1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 108*0a6a1f1dSLionel Sambuc return [super initB1]; // expected-warning {{designated initializer invoked a non-designated initializer}} 109*0a6a1f1dSLionel Sambuc} 110*0a6a1f1dSLionel Sambuc@end 111*0a6a1f1dSLionel Sambuc 112*0a6a1f1dSLionel Sambuc@interface S4 : B1 113*0a6a1f1dSLionel Sambuc-(id)initB1; 114*0a6a1f1dSLionel Sambuc-(id)initB3; 115*0a6a1f1dSLionel Sambuc@end 116*0a6a1f1dSLionel Sambuc 117*0a6a1f1dSLionel Sambuc@implementation S4 118*0a6a1f1dSLionel Sambuc-(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 119*0a6a1f1dSLionel Sambuc return 0; 120*0a6a1f1dSLionel Sambuc} 121*0a6a1f1dSLionel Sambuc-(id)initB3 { 122*0a6a1f1dSLionel Sambuc return [super initB3]; 123*0a6a1f1dSLionel Sambuc} 124*0a6a1f1dSLionel Sambuc@end 125*0a6a1f1dSLionel Sambuc 126*0a6a1f1dSLionel Sambuc@interface S5 : B1 127*0a6a1f1dSLionel Sambuc-(void)meth; 128*0a6a1f1dSLionel Sambuc@end 129*0a6a1f1dSLionel Sambuc 130*0a6a1f1dSLionel Sambuc@implementation S5 131*0a6a1f1dSLionel Sambuc-(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 132*0a6a1f1dSLionel Sambuc return 0; 133*0a6a1f1dSLionel Sambuc} 134*0a6a1f1dSLionel Sambuc-(id)initB3 { 135*0a6a1f1dSLionel Sambuc [self initB1]; // expected-warning {{designated initializer should only invoke a designated initializer on 'super'}} 136*0a6a1f1dSLionel Sambuc S5 *s; 137*0a6a1f1dSLionel Sambuc [s initB1]; 138*0a6a1f1dSLionel Sambuc [self meth]; 139*0a6a1f1dSLionel Sambuc void (^blk)(void) = ^{ 140*0a6a1f1dSLionel Sambuc [self initB1]; // expected-warning {{designated initializer should only invoke a designated initializer on 'super'}} 141*0a6a1f1dSLionel Sambuc }; 142*0a6a1f1dSLionel Sambuc return [super initB3]; 143*0a6a1f1dSLionel Sambuc} 144*0a6a1f1dSLionel Sambuc-(void)meth {} 145*0a6a1f1dSLionel Sambuc@end 146*0a6a1f1dSLionel Sambuc 147*0a6a1f1dSLionel Sambuc@interface S6 : B1 148*0a6a1f1dSLionel Sambuc-(id)initS1 NS_DESIGNATED_INITIALIZER; 149*0a6a1f1dSLionel Sambuc-(id)initS2; 150*0a6a1f1dSLionel Sambuc-(id)initS3; 151*0a6a1f1dSLionel Sambuc-(id)initS4; 152*0a6a1f1dSLionel Sambuc@end 153*0a6a1f1dSLionel Sambuc 154*0a6a1f1dSLionel Sambuc@implementation S6 // expected-warning {{method override for the designated initializer of the superclass '-initB1' not found}} \ 155*0a6a1f1dSLionel Sambuc // expected-warning {{method override for the designated initializer of the superclass '-initB3' not found}} 156*0a6a1f1dSLionel Sambuc-(id)initS1 { 157*0a6a1f1dSLionel Sambuc return [super initB1]; 158*0a6a1f1dSLionel Sambuc} 159*0a6a1f1dSLionel Sambuc-(id)initS2 { // expected-warning {{convenience initializer missing a 'self' call to another initializer}} 160*0a6a1f1dSLionel Sambuc return [super initB1]; // expected-warning {{convenience initializer should not invoke an initializer on 'super'}} 161*0a6a1f1dSLionel Sambuc} 162*0a6a1f1dSLionel Sambuc-(id)initS3 { 163*0a6a1f1dSLionel Sambuc return [self initB1]; 164*0a6a1f1dSLionel Sambuc} 165*0a6a1f1dSLionel Sambuc-(id)initS4 { 166*0a6a1f1dSLionel Sambuc return [self initS1]; 167*0a6a1f1dSLionel Sambuc} 168*0a6a1f1dSLionel Sambuc-(id)initS5 { 169*0a6a1f1dSLionel Sambuc [super initB1]; // expected-warning {{convenience initializer should not invoke an initializer on 'super'}} 170*0a6a1f1dSLionel Sambuc void (^blk)(void) = ^{ 171*0a6a1f1dSLionel Sambuc [super initB1]; // expected-warning {{convenience initializer should not invoke an initializer on 'super'}} 172*0a6a1f1dSLionel Sambuc }; 173*0a6a1f1dSLionel Sambuc return [self initS1]; 174*0a6a1f1dSLionel Sambuc} 175*0a6a1f1dSLionel Sambuc-(id)initS6 { // expected-warning {{convenience initializer missing a 'self' call to another initializer}} 176*0a6a1f1dSLionel Sambuc S6 *s; 177*0a6a1f1dSLionel Sambuc return [s initS1]; 178*0a6a1f1dSLionel Sambuc} 179*0a6a1f1dSLionel Sambuc@end 180*0a6a1f1dSLionel Sambuc 181*0a6a1f1dSLionel Sambuc@interface SS4 : S4 182*0a6a1f1dSLionel Sambuc-(id)initB1; 183*0a6a1f1dSLionel Sambuc@end 184*0a6a1f1dSLionel Sambuc 185*0a6a1f1dSLionel Sambuc@implementation SS4 186*0a6a1f1dSLionel Sambuc-(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 187*0a6a1f1dSLionel Sambuc return 0; 188*0a6a1f1dSLionel Sambuc} 189*0a6a1f1dSLionel Sambuc@end 190*0a6a1f1dSLionel Sambuc 191*0a6a1f1dSLionel Sambuc@interface S7 : B1 192*0a6a1f1dSLionel Sambuc-(id)initB1; 193*0a6a1f1dSLionel Sambuc-(id)initB3; 194*0a6a1f1dSLionel Sambuc-(id)initNewOne; 195*0a6a1f1dSLionel Sambuc@end 196*0a6a1f1dSLionel Sambuc 197*0a6a1f1dSLionel Sambuc@interface SS7 : S7 198*0a6a1f1dSLionel Sambuc-(id)initB1; 199*0a6a1f1dSLionel Sambuc@end 200*0a6a1f1dSLionel Sambuc 201*0a6a1f1dSLionel Sambuc@implementation SS7 202*0a6a1f1dSLionel Sambuc-(id)initB1 { 203*0a6a1f1dSLionel Sambuc return 0; 204*0a6a1f1dSLionel Sambuc} 205*0a6a1f1dSLionel Sambuc@end 206*0a6a1f1dSLionel Sambuc 207*0a6a1f1dSLionel Sambuc__attribute__((objc_root_class)) 208*0a6a1f1dSLionel Sambuc@interface B2 209*0a6a1f1dSLionel Sambuc-(id)init; 210*0a6a1f1dSLionel Sambuc@end 211*0a6a1f1dSLionel Sambuc 212*0a6a1f1dSLionel Sambuc@interface S8: B2 213*0a6a1f1dSLionel Sambuc-(id)initS8 NS_DESIGNATED_INITIALIZER; 214*0a6a1f1dSLionel Sambuc@end 215*0a6a1f1dSLionel Sambuc 216*0a6a1f1dSLionel Sambuc@implementation S8 217*0a6a1f1dSLionel Sambuc-(id)initS8 218*0a6a1f1dSLionel Sambuc{ 219*0a6a1f1dSLionel Sambuc return [super init]; 220*0a6a1f1dSLionel Sambuc} 221*0a6a1f1dSLionel Sambuc@end 222*0a6a1f1dSLionel Sambuc 223*0a6a1f1dSLionel Sambuc@interface S9 : B1 224*0a6a1f1dSLionel Sambuc-(id)initB1; 225*0a6a1f1dSLionel Sambuc-(id)initB3; 226*0a6a1f1dSLionel Sambuc@end 227*0a6a1f1dSLionel Sambuc 228*0a6a1f1dSLionel Sambuc@interface S9(secondInit) 229*0a6a1f1dSLionel Sambuc-(id)initNewOne; 230*0a6a1f1dSLionel Sambuc@end 231*0a6a1f1dSLionel Sambuc 232*0a6a1f1dSLionel Sambuc@interface SS9 : S9 233*0a6a1f1dSLionel Sambuc-(id)initB1; 234*0a6a1f1dSLionel Sambuc@end 235*0a6a1f1dSLionel Sambuc 236*0a6a1f1dSLionel Sambuc@implementation SS9 237*0a6a1f1dSLionel Sambuc-(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 238*0a6a1f1dSLionel Sambuc return 0; 239*0a6a1f1dSLionel Sambuc} 240*0a6a1f1dSLionel Sambuc@end 241*0a6a1f1dSLionel Sambuc 242*0a6a1f1dSLionel Sambuc// rdar://16261494 243*0a6a1f1dSLionel Sambuc@class GEOPDAnalyticMetadata; // expected-note {{forward declaration of class here}} 244*0a6a1f1dSLionel Sambuc 245*0a6a1f1dSLionel Sambuc@implementation GEOPDAnalyticMetadata (PlaceCardExtras) // expected-error {{cannot find interface declaration for 'GEOPDAnalyticMetadata'}} 246*0a6a1f1dSLionel Sambuc- (instancetype)initInProcess 247*0a6a1f1dSLionel Sambuc{ 248*0a6a1f1dSLionel Sambuc return ((void*)0); 249*0a6a1f1dSLionel Sambuc} 250*0a6a1f1dSLionel Sambuc@end 251*0a6a1f1dSLionel Sambuc 252*0a6a1f1dSLionel Sambuc// rdar://16305460 253*0a6a1f1dSLionel Sambuc__attribute__((objc_root_class)) 254*0a6a1f1dSLionel Sambuc@interface MyObject 255*0a6a1f1dSLionel Sambuc- (instancetype)initWithStuff:(id)stuff __attribute__((objc_designated_initializer)); 256*0a6a1f1dSLionel Sambuc- (instancetype)init __attribute__((unavailable)); 257*0a6a1f1dSLionel Sambuc@end 258*0a6a1f1dSLionel Sambuc 259*0a6a1f1dSLionel Sambuc@implementation MyObject 260*0a6a1f1dSLionel Sambuc- (instancetype)init 261*0a6a1f1dSLionel Sambuc{ 262*0a6a1f1dSLionel Sambuc return ((void*)0); 263*0a6a1f1dSLionel Sambuc} 264*0a6a1f1dSLionel Sambuc@end 265*0a6a1f1dSLionel Sambuc 266*0a6a1f1dSLionel Sambuc// rdar://16323233 267*0a6a1f1dSLionel Sambuc__attribute__((objc_root_class)) 268*0a6a1f1dSLionel Sambuc@interface B4 269*0a6a1f1dSLionel Sambuc-(id)initB4 NS_DESIGNATED_INITIALIZER; // expected-note 4 {{method marked as designated initializer of the class here}} 270*0a6a1f1dSLionel Sambuc-(id)initNonDI; 271*0a6a1f1dSLionel Sambuc@end 272*0a6a1f1dSLionel Sambuc 273*0a6a1f1dSLionel Sambuc@interface rdar16323233 : B4 274*0a6a1f1dSLionel Sambuc-(id)initS4 NS_DESIGNATED_INITIALIZER; 275*0a6a1f1dSLionel Sambuc@end 276*0a6a1f1dSLionel Sambuc 277*0a6a1f1dSLionel Sambuc@implementation rdar16323233 278*0a6a1f1dSLionel Sambuc-(id)initS4 { 279*0a6a1f1dSLionel Sambuc static id sSharedObject = (void*)0; 280*0a6a1f1dSLionel Sambuc (void)^(void) { 281*0a6a1f1dSLionel Sambuc sSharedObject = [super initB4]; 282*0a6a1f1dSLionel Sambuc }; 283*0a6a1f1dSLionel Sambuc return 0; 284*0a6a1f1dSLionel Sambuc} 285*0a6a1f1dSLionel Sambuc-(id)initB4 { 286*0a6a1f1dSLionel Sambuc return [self initS4]; 287*0a6a1f1dSLionel Sambuc} 288*0a6a1f1dSLionel Sambuc@end 289*0a6a1f1dSLionel Sambuc 290*0a6a1f1dSLionel Sambuc@interface S1B4 : B4 291*0a6a1f1dSLionel Sambuc@end 292*0a6a1f1dSLionel Sambuc@implementation S1B4 293*0a6a1f1dSLionel Sambuc-(id)initB4 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 294*0a6a1f1dSLionel Sambuc return [super initNonDI]; // expected-warning {{designated initializer invoked a non-designated initializer}} 295*0a6a1f1dSLionel Sambuc} 296*0a6a1f1dSLionel Sambuc@end 297*0a6a1f1dSLionel Sambuc 298*0a6a1f1dSLionel Sambuc@interface S2B4 : B4 299*0a6a1f1dSLionel Sambuc-(id)initB4; 300*0a6a1f1dSLionel Sambuc@end 301*0a6a1f1dSLionel Sambuc@implementation S2B4 302*0a6a1f1dSLionel Sambuc-(id)initB4 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 303*0a6a1f1dSLionel Sambuc return [super initNonDI]; // expected-warning {{designated initializer invoked a non-designated initializer}} 304*0a6a1f1dSLionel Sambuc} 305*0a6a1f1dSLionel Sambuc@end 306*0a6a1f1dSLionel Sambuc 307*0a6a1f1dSLionel Sambuc@interface S3B4 : B4 308*0a6a1f1dSLionel Sambuc@end 309*0a6a1f1dSLionel Sambuc@implementation S3B4 310*0a6a1f1dSLionel Sambuc-(id)initNew { 311*0a6a1f1dSLionel Sambuc return [super initB4]; 312*0a6a1f1dSLionel Sambuc} 313*0a6a1f1dSLionel Sambuc-(id)initB4 { 314*0a6a1f1dSLionel Sambuc return [self initNew]; 315*0a6a1f1dSLionel Sambuc} 316*0a6a1f1dSLionel Sambuc@end 317*0a6a1f1dSLionel Sambuc 318*0a6a1f1dSLionel Sambuc@interface S4B4 : B4 319*0a6a1f1dSLionel Sambuc-(id)initNew; 320*0a6a1f1dSLionel Sambuc@end 321*0a6a1f1dSLionel Sambuc@implementation S4B4 322*0a6a1f1dSLionel Sambuc-(id)initNew { 323*0a6a1f1dSLionel Sambuc return [super initB4]; 324*0a6a1f1dSLionel Sambuc} 325*0a6a1f1dSLionel Sambuc-(id)initB4 { 326*0a6a1f1dSLionel Sambuc return [self initNew]; 327*0a6a1f1dSLionel Sambuc} 328*0a6a1f1dSLionel Sambuc@end 329*0a6a1f1dSLionel Sambuc 330*0a6a1f1dSLionel Sambuc@interface S5B4 : B4 331*0a6a1f1dSLionel Sambuc-(id)initB4; 332*0a6a1f1dSLionel Sambuc@end 333*0a6a1f1dSLionel Sambuc@implementation S5B4 334*0a6a1f1dSLionel Sambuc-(id)initNew { 335*0a6a1f1dSLionel Sambuc return [super initB4]; 336*0a6a1f1dSLionel Sambuc} 337*0a6a1f1dSLionel Sambuc-(id)initB4 { 338*0a6a1f1dSLionel Sambuc return [self initNew]; 339*0a6a1f1dSLionel Sambuc} 340*0a6a1f1dSLionel Sambuc@end 341*0a6a1f1dSLionel Sambuc 342*0a6a1f1dSLionel Sambuc@interface S6B4 : B4 343*0a6a1f1dSLionel Sambuc-(id)initNew; 344*0a6a1f1dSLionel Sambuc-(id)initB4; 345*0a6a1f1dSLionel Sambuc@end 346*0a6a1f1dSLionel Sambuc@implementation S6B4 347*0a6a1f1dSLionel Sambuc-(id)initNew { 348*0a6a1f1dSLionel Sambuc return [super initB4]; 349*0a6a1f1dSLionel Sambuc} 350*0a6a1f1dSLionel Sambuc-(id)initB4 { 351*0a6a1f1dSLionel Sambuc return [self initNew]; 352*0a6a1f1dSLionel Sambuc} 353*0a6a1f1dSLionel Sambuc@end 354*0a6a1f1dSLionel Sambuc 355*0a6a1f1dSLionel Sambuc__attribute__((objc_root_class)) 356*0a6a1f1dSLionel Sambuc@interface NSObject 357*0a6a1f1dSLionel Sambuc-(instancetype) init NS_DESIGNATED_INITIALIZER; // expected-note {{method marked as designated initializer of the class here}} 358*0a6a1f1dSLionel Sambuc@end 359*0a6a1f1dSLionel Sambuc 360*0a6a1f1dSLionel Sambuc@interface Test3 : NSObject 361*0a6a1f1dSLionel Sambuc@end 362*0a6a1f1dSLionel Sambuc 363*0a6a1f1dSLionel Sambuc@implementation Test3 364*0a6a1f1dSLionel Sambuc-(instancetype) initWithBasePath:(id)path { 365*0a6a1f1dSLionel Sambuc return [super init]; 366*0a6a1f1dSLionel Sambuc} 367*0a6a1f1dSLionel Sambuc-(instancetype) init { 368*0a6a1f1dSLionel Sambuc return [self initWithBasePath:0]; 369*0a6a1f1dSLionel Sambuc} 370*0a6a1f1dSLionel Sambuc@end 371*0a6a1f1dSLionel Sambuc 372*0a6a1f1dSLionel Sambuc@interface Test1 : NSObject 373*0a6a1f1dSLionel Sambuc-(instancetype) init NS_DESIGNATED_INITIALIZER; 374*0a6a1f1dSLionel Sambuc@end 375*0a6a1f1dSLionel Sambuc@implementation Test1 376*0a6a1f1dSLionel Sambuc-(instancetype) init { 377*0a6a1f1dSLionel Sambuc return self; 378*0a6a1f1dSLionel Sambuc} 379*0a6a1f1dSLionel Sambuc@end 380*0a6a1f1dSLionel Sambuc 381*0a6a1f1dSLionel Sambuc 382*0a6a1f1dSLionel Sambuc@interface Test2 : NSObject 383*0a6a1f1dSLionel Sambuc@end 384*0a6a1f1dSLionel Sambuc@interface SubTest2 : Test2 385*0a6a1f1dSLionel Sambuc@end 386*0a6a1f1dSLionel Sambuc@implementation SubTest2 387*0a6a1f1dSLionel Sambuc-(instancetype) init { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}} 388*0a6a1f1dSLionel Sambuc return self; 389*0a6a1f1dSLionel Sambuc} 390*0a6a1f1dSLionel Sambuc@end 391*0a6a1f1dSLionel Sambuc 392*0a6a1f1dSLionel Sambuc__attribute__((objc_root_class)) 393*0a6a1f1dSLionel Sambuc@interface RootNoDI 394*0a6a1f1dSLionel Sambuc-(id)init; 395*0a6a1f1dSLionel Sambuc@end 396*0a6a1f1dSLionel Sambuc 397*0a6a1f1dSLionel Sambuc@interface Base : RootNoDI 398*0a6a1f1dSLionel Sambuc@end 399*0a6a1f1dSLionel Sambuc 400*0a6a1f1dSLionel Sambuc@implementation Base 401*0a6a1f1dSLionel Sambuc@end 402*0a6a1f1dSLionel Sambuc 403*0a6a1f1dSLionel Sambuc@interface Derived : Base 404*0a6a1f1dSLionel Sambuc- (instancetype)initWithInt:(int)n NS_DESIGNATED_INITIALIZER; 405*0a6a1f1dSLionel Sambuc@end 406*0a6a1f1dSLionel Sambuc 407*0a6a1f1dSLionel Sambuc@implementation Derived 408*0a6a1f1dSLionel Sambuc- (instancetype)initWithInt:(int)n 409*0a6a1f1dSLionel Sambuc{ 410*0a6a1f1dSLionel Sambuc return [super init]; 411*0a6a1f1dSLionel Sambuc} 412*0a6a1f1dSLionel Sambuc@end 413