Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1  -fsyntax-only -verify -Wno-objc-root-class %s
      2 // RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify -Wno-objc-root-class %s
      3 // RUN: %clang_cc1  -fsyntax-only -fobjc-arc -verify -Wno-objc-root-class %s
      4 // RUN: %clang_cc1 -x objective-c++ -fobjc-arc -fsyntax-only -verify -Wno-objc-root-class %s
      5 // rdar://6386358
      6 
      7 #if __has_attribute(objc_requires_super)
      8 #define  NS_REQUIRES_SUPER __attribute((objc_requires_super))
      9 #endif
     10 
     11 @protocol NSObject // expected-note {{protocol is declared here}}
     12 - MyDealloc NS_REQUIRES_SUPER; // expected-warning {{'objc_requires_super' attribute cannot be applied to methods in protocols}}
     13 @end
     14 
     15 @interface Root
     16 - MyDealloc __attribute((objc_requires_super));
     17 - (void)XXX __attribute((objc_requires_super));
     18 - (void) dealloc __attribute((objc_requires_super)); // expected-warning {{'objc_requires_super' attribute cannot be applied to dealloc}}
     19 - (void) MyDeallocMeth; // Method in root is not annotated.
     20 - (void) AnnotMyDeallocMeth __attribute((objc_requires_super));
     21 - (void) AnnotMyDeallocMethCAT NS_REQUIRES_SUPER; 
     22 
     23 + (void)registerClass:(id)name __attribute((objc_requires_super));
     24 @end
     25 
     26 @interface Baz : Root<NSObject>
     27 - MyDealloc;
     28 - (void) MyDeallocMeth __attribute((objc_requires_super)); // 'Baz' author has annotated method
     29 - (void) AnnotMyDeallocMeth; // Annotated in root but not here. Annotation is inherited though
     30 - (void) AnnotMeth __attribute((objc_requires_super)); // 'Baz' author has annotated method
     31 @end
     32 
     33 @implementation Baz
     34 -  MyDealloc {
     35    [super MyDealloc];
     36         return 0;
     37 }
     38 
     39 - (void)XXX {
     40   [super MyDealloc];
     41 } // expected-warning {{method possibly missing a [super XXX] call}}
     42 
     43 - (void) MyDeallocMeth {} 
     44 - (void) AnnotMyDeallocMeth{} // expected-warning {{method possibly missing a [super AnnotMyDeallocMeth] call}}
     45 - (void) AnnotMeth{};
     46 
     47 + (void)registerClass:(id)name {} // expected-warning {{method possibly missing a [super registerClass:] call}}
     48 @end
     49 
     50 @interface Bar : Baz
     51 @end
     52 
     53 @implementation Bar
     54 - (void) MyDeallocMeth {} // expected-warning {{method possibly missing a [super MyDeallocMeth] call}}
     55 - (void) AnnotMyDeallocMeth{} // expected-warning {{method possibly missing a [super AnnotMyDeallocMeth] call}}
     56 - (void) AnnotMeth{};  // expected-warning {{method possibly missing a [super AnnotMeth] call}}
     57 @end
     58 
     59 @interface Bar(CAT) 
     60 - (void) AnnotMyDeallocMethCAT; // Annotated in root but not here. Annotation is inherited though
     61 - (void) AnnotMethCAT __attribute((objc_requires_super));
     62 @end
     63 
     64 @implementation Bar(CAT)
     65 - (void) MyDeallocMeth {} // expected-warning {{method possibly missing a [super MyDeallocMeth] call}}
     66 - (void) AnnotMyDeallocMeth{} // expected-warning {{method possibly missing a [super AnnotMyDeallocMeth] call}}
     67 - (void) AnnotMeth{};  // expected-warning {{method possibly missing a [super AnnotMeth] call}}
     68 - (void) AnnotMyDeallocMethCAT{}; // expected-warning {{method possibly missing a [super AnnotMyDeallocMethCAT] call}}
     69 - (void) AnnotMethCAT {};
     70 @end
     71 
     72 
     73 @interface Valid : Baz
     74 @end
     75 
     76 @implementation Valid
     77 
     78 - (void)MyDeallocMeth {
     79   [super MyDeallocMeth]; // no-warning
     80 }
     81 
     82 
     83 + (void)registerClass:(id)name {
     84   [super registerClass:name]; // no-warning
     85 }
     86 
     87 @end
     88 
     89 // rdar://14251387
     90 #define IBAction void)__attribute__((ibaction)
     91 
     92 @interface UIViewController @end
     93 
     94 @interface ViewController : UIViewController
     95 - (void) someMethodRequiringSuper NS_REQUIRES_SUPER;
     96 - (IBAction) someAction;
     97 - (IBAction) someActionRequiringSuper NS_REQUIRES_SUPER;
     98 @end
     99 
    100 
    101 @implementation ViewController
    102 - (void) someMethodRequiringSuper
    103 {
    104 }
    105 - (IBAction) someAction
    106 {
    107 }
    108 - (IBAction) someActionRequiringSuper
    109 {
    110 } 
    111 @end
    112 
    113 // rdar://15385981
    114 @interface Barn
    115 - (void)openDoor __attribute__((objc_requires_super));
    116 @end
    117 
    118 @implementation Barn
    119 - (void) openDoor
    120 {
    121     ;
    122 }
    123 @end
    124 
    125 @interface HorseBarn:Barn @end
    126 
    127 @implementation HorseBarn
    128 - (void) openDoor
    129 {
    130     ;
    131 }	// expected-warning {{method possibly missing a [super openDoor] call}}
    132 @end
    133