brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.8 KiB · 343203f Raw
454 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -Wno-incomplete-implementation -verify -fblocks %s2 3#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))4#define NS_UNAVAILABLE __attribute__((unavailable))5 6void fnfoo(void) NS_DESIGNATED_INITIALIZER; // expected-error {{'objc_designated_initializer' attribute only applies to Objective-C methods}}7 8@protocol P19-(id)init NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}}10@end11 12__attribute__((objc_root_class))13@interface I114-(void)meth NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}}15-(id)init NS_DESIGNATED_INITIALIZER;16+(id)init NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}}17@end18 19@interface I1(cat)20-(id)init2 NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}}21@end22 23@interface I1()24-(id)init3 NS_DESIGNATED_INITIALIZER;25@end26 27@implementation I128-(void)meth {}29-(id)init NS_DESIGNATED_INITIALIZER { return 0; } // expected-error {{only applies to init methods of interface or class extension declarations}}30+(id)init { return 0; }31-(id)init3 { return 0; }32-(id)init4 NS_DESIGNATED_INITIALIZER { return 0; } // expected-error {{only applies to init methods of interface or class extension declarations}} \33									 			   // expected-warning {{convenience initializer missing a 'self' call to another initializer}}34@end35 36__attribute__((objc_root_class))37@interface B138-(id)initB1 NS_DESIGNATED_INITIALIZER; // expected-note 6 {{method marked as designated initializer of the class here}}39-(id)initB2;40@end41 42@interface B1()43-(id)initB3 NS_DESIGNATED_INITIALIZER; // expected-note 4 {{method marked as designated initializer of the class here}}44@end;45 46@implementation B147-(id)initB1 { return 0; }48-(id)initB2 { return 0; } // expected-warning {{convenience initializer missing a 'self' call to another initializer}}49-(id)initB3 { return 0; }50@end51 52@interface S1 : B153-(id)initS1 NS_DESIGNATED_INITIALIZER; // expected-note {{method marked as designated initializer of the class here}}54-(id)initS2 NS_DESIGNATED_INITIALIZER;55-(id)initS3 NS_DESIGNATED_INITIALIZER; // expected-note 2 {{method marked as designated initializer of the class here}}56-(id)initB1;57@end58 59@interface S1()60-(id)initS4 NS_DESIGNATED_INITIALIZER; // expected-note 2 {{method marked as designated initializer of the class here}}61@end62 63@implementation S164-(id)initS1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}65  return 0;66}67-(id)initS2 {68  return [super initB1];69}70-(id)initS3 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}71  return [super initB2]; // expected-warning {{designated initializer invoked a non-designated initializer}}72}73-(id)initS4 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}74  return [self initB1]; // expected-warning {{designated initializer should only invoke a designated initializer on 'super'}}75}76-(id)initB1 {77  return [self initS1];78}79-(id)initB3 {80  return [self initS1];81}82@end83 84@interface S2 : B185-(id)initB1;86@end87 88@interface SS2 : S289-(id)initSS1 NS_DESIGNATED_INITIALIZER;90@end91 92@implementation SS2 // expected-warning {{method override for the designated initializer of the superclass '-initB1' not found}} \93                    // expected-warning {{method override for the designated initializer of the superclass '-initB3' not found}}94-(id)initSS1 {95  return [super initB1];96}97@end98 99@interface S3 : B1100-(id)initS1 NS_DESIGNATED_INITIALIZER; // expected-note {{method marked as designated initializer of the class here}}101@end102 103@interface SS3 : S3104-(id)initSS1 NS_DESIGNATED_INITIALIZER; // expected-note 2 {{method marked as designated initializer of the class here}}105@end106 107@implementation SS3 // expected-warning {{method override for the designated initializer of the superclass '-initS1' not found}}108-(id)initSS1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}109  return [super initB1]; // expected-warning {{designated initializer invoked a non-designated initializer}}110}111@end112 113@interface S4 : B1114-(id)initB1;115-(id)initB3;116@end117 118@implementation S4119-(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}120  return 0;121}122-(id)initB3 {123  return [super initB3];124}125@end126 127@interface S5 : B1128-(void)meth;129@end130 131@implementation S5132-(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}133  return 0;134}135-(id)initB3 {136  [self initB1]; // expected-warning {{designated initializer should only invoke a designated initializer on 'super'}}137  S5 *s;138  [s initB1];139  [self meth];140  void (^blk)(void) = ^{141    [self initB1]; // expected-warning {{designated initializer should only invoke a designated initializer on 'super'}}142  };143  return [super initB3];144}145-(void)meth {}146@end147 148@interface S6 : B1149-(id)initS1 NS_DESIGNATED_INITIALIZER;150-(id)initS2;151-(id)initS3;152-(id)initS4;153@end154 155@implementation S6 // expected-warning {{method override for the designated initializer of the superclass '-initB1' not found}} \156                   // expected-warning {{method override for the designated initializer of the superclass '-initB3' not found}}157-(id)initS1 {158  return [super initB1];159}160-(id)initS2 { // expected-warning {{convenience initializer missing a 'self' call to another initializer}}161  return [super initB1]; // expected-warning {{convenience initializer should not invoke an initializer on 'super'}}162}163-(id)initS3 {164  return [self initB1];165}166-(id)initS4 {167  return [self initS1];168}169-(id)initS5 {170  [super initB1]; // expected-warning {{convenience initializer should not invoke an initializer on 'super'}}171  void (^blk)(void) = ^{172    [super initB1]; // expected-warning {{convenience initializer should not invoke an initializer on 'super'}}173  };174  return [self initS1];175}176-(id)initS6 { // expected-warning {{convenience initializer missing a 'self' call to another initializer}}177  S6 *s;178  return [s initS1];179}180@end181 182@interface SS4 : S4183-(id)initB1;184@end185 186@implementation SS4187-(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}188  return 0;189}190@end191 192@interface S7 : B1193-(id)initB1;194-(id)initB3;195-(id)initNewOne;196@end197 198@interface SS7 : S7199-(id)initB1;200@end201 202@implementation SS7203-(id)initB1 {204  return 0;205}206@end207 208__attribute__((objc_root_class))209@interface B2210-(id)init;211@end212 213@interface S8: B2214-(id)initS8 NS_DESIGNATED_INITIALIZER;215@end216 217@implementation S8218-(id)initS8219{220  return [super init];221}222@end223 224@interface S9 : B1225-(id)initB1;226-(id)initB3;227@end228 229@interface S9(secondInit)230-(id)initNewOne;231@end232 233@interface SS9 : S9234-(id)initB1;235@end236 237@implementation SS9238-(id)initB1 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}239  return 0;240}241@end242 243@class GEOPDAnalyticMetadata; // expected-note {{forward declaration of class here}}244 245@implementation GEOPDAnalyticMetadata (PlaceCardExtras) // expected-error {{cannot find interface declaration for 'GEOPDAnalyticMetadata'}}246- (instancetype)initInProcess247{248    return ((void*)0);249}250@end251 252__attribute__((objc_root_class))253@interface MyObject254- (instancetype)initWithStuff:(id)stuff __attribute__((objc_designated_initializer));255- (instancetype)init NS_UNAVAILABLE;256@end257 258@implementation MyObject259- (instancetype)init260{261   return ((void*)0);262}263@end264 265__attribute__((objc_root_class))266@interface B4 267-(id)initB4 NS_DESIGNATED_INITIALIZER; // expected-note 4 {{method marked as designated initializer of the class here}}268-(id)initNonDI;269@end270 271@interface rdar16323233 : B4272-(id)initS4 NS_DESIGNATED_INITIALIZER;273@end274 275@implementation rdar16323233276-(id)initS4 {277    static id sSharedObject = (void*)0;278    (void)^(void) {279        sSharedObject = [super initB4];280    };281    return 0;282}283-(id)initB4 {284   return [self initS4];285}286@end287 288@interface S1B4 : B4289@end290@implementation S1B4291-(id)initB4 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}292   return [super initNonDI]; // expected-warning {{designated initializer invoked a non-designated initializer}}293}294@end295 296@interface S2B4 : B4297-(id)initB4;298@end299@implementation S2B4300-(id)initB4 { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}301   return [super initNonDI]; // expected-warning {{designated initializer invoked a non-designated initializer}}302}303@end304 305@interface S3B4 : B4306@end307@implementation S3B4308-(id)initNew {309  return [super initB4];310}311-(id)initB4 {312   return [self initNew];313}314@end315 316@interface S4B4 : B4317-(id)initNew;318@end319@implementation S4B4320-(id)initNew {321  return [super initB4];322}323-(id)initB4 {324   return [self initNew];325}326@end327 328@interface S5B4 : B4329-(id)initB4;330@end331@implementation S5B4332-(id)initNew {333  return [super initB4];334}335-(id)initB4 {336   return [self initNew];337}338@end339 340@interface S6B4 : B4341-(id)initNew;342-(id)initB4;343@end344@implementation S6B4345-(id)initNew {346  return [super initB4];347}348-(id)initB4 {349   return [self initNew];350}351@end352 353__attribute__((objc_root_class))354@interface NSObject355-(instancetype) init NS_DESIGNATED_INITIALIZER; // expected-note {{method marked as designated initializer of the class here}}356@end357 358@interface Test3 : NSObject359@end360 361@implementation Test3362-(instancetype) initWithBasePath:(id)path {363  return [super init];364}365-(instancetype) init {366  return [self initWithBasePath:0];367}368@end369 370@interface Test1 : NSObject371-(instancetype) init NS_DESIGNATED_INITIALIZER;372@end373@implementation Test1374-(instancetype) init {375  return self;376}377@end378 379@interface SubTest1 : Test1380-(instancetype)init NS_UNAVAILABLE;381-(instancetype)initWithRequiredParameter:(id)foo NS_DESIGNATED_INITIALIZER;382@end383@implementation SubTest1384-(instancetype)initWithRequiredParameter:(id)foo {385  return [super init];386}387@end388 389@interface SubTest1Ext : Test1390-(instancetype)initWithRequiredParameter:(id)foo NS_DESIGNATED_INITIALIZER;391@end392// Mark 'init' as unavailable in the extension to silence warning.393@interface SubTest1Ext()394-(instancetype)init NS_UNAVAILABLE;395@end396@implementation SubTest1Ext397-(instancetype)initWithRequiredParameter:(id)foo {398  return [super init];399}400@end401 402@interface Test2 : NSObject403@end404@interface SubTest2 : Test2405@end406@implementation SubTest2407-(instancetype) init { // expected-warning {{designated initializer missing a 'super' call to a designated initializer of the super class}}408  return self;409}410@end411 412__attribute__((objc_root_class))413@interface RootNoDI414-(id)init;415@end416 417@interface Base : RootNoDI418@end419 420@implementation Base421@end422 423@interface Derived : Base424- (instancetype)initWithInt:(int)n NS_DESIGNATED_INITIALIZER;425@end426 427@implementation Derived428- (instancetype)initWithInt:(int)n429{430  return [super init];431}432@end433 434@interface ExtensionForMissingInterface() // expected-error{{cannot find interface declaration}}435- (instancetype)init NS_DESIGNATED_INITIALIZER;436@end437 438@interface CategoryForMissingInterface(Cat) // expected-error{{cannot find interface declaration}}439- (instancetype)init NS_DESIGNATED_INITIALIZER; // expected-error{{only applies to init methods of interface or class extension declarations}}440@end441 442@interface TwoAttrs443-(instancetype)foo444    __attribute__((objc_designated_initializer))445    __attribute__((objc_method_family(init)));446-(instancetype)bar447    __attribute__((objc_method_family(init)))448    __attribute__((objc_designated_initializer));449-(instancetype)baz450  __attribute__((objc_designated_initializer, objc_method_family(init)));451-(instancetype)quux452  __attribute__((objc_method_family(init), objc_designated_initializer));453@end454