brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.8 KiB · 1729359 Raw
241 lines · plain
1// RUN: %clang_analyze_cc1 -fblocks -analyzer-checker=osx.cocoa.MissingSuperCall -verify -Wno-objc-root-class %s2 3// Define used Classes4@protocol NSObject5- (id)retain;6- (oneway void)release;7@end8@interface NSObject <NSObject> {}9- (id)init;10+ (id)alloc;11@end12typedef char BOOL;13typedef double NSTimeInterval;14typedef enum UIViewAnimationOptions {15    UIViewAnimationOptionLayoutSubviews = 1 <<  016} UIViewAnimationOptions;17@interface NSCoder : NSObject {}18@end19 20// Define the Superclasses for our Checks21@interface UIViewController : NSObject {}22- (void)addChildViewController:(UIViewController *)childController;23- (void)viewDidAppear:(BOOL)animated;24- (void)viewDidDisappear:(BOOL)animated;25- (void)viewDidUnload;26- (void)viewDidLoad;27- (void)viewWillUnload;28- (void)viewWillAppear:(BOOL)animated;29- (void)viewWillDisappear:(BOOL)animated;30- (void)didReceiveMemoryWarning;31- (void)removeFromParentViewController;32- (void)transitionFromViewController:(UIViewController *)fromViewController33  toViewController:(UIViewController *)toViewController34  duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options35  animations:(void (^)(void))animations36  completion:(void (^)(BOOL finished))completion;37@end38@interface UIResponder : NSObject {}39- (BOOL)resignFirstResponder;40@end41@interface NSResponder : NSObject {}42- (void)restoreStateWithCoder:(NSCoder *)coder;43- (void)encodeRestorableStateWithCoder:(NSCoder *)coder;44@end45@interface NSDocument : NSObject {}46- (void)restoreStateWithCoder:(NSCoder *)coder;47- (void)encodeRestorableStateWithCoder:(NSCoder *)coder;48@end49 50// Checks51 52// Do not warn if UIViewController/*Responder/NSDocument is not our superclass53@interface TestA 54@end55@implementation TestA56 57- (void)addChildViewController:(UIViewController *)childController {}58- (void)viewDidAppear:(BOOL)animated {}59- (void)viewDidDisappear:(BOOL)animated {}60- (void)viewDidUnload {}61- (void)viewDidLoad {}62- (void)viewWillUnload {}63- (void)viewWillAppear:(BOOL)animated {}64- (void)viewWillDisappear:(BOOL)animated {}65- (void)didReceiveMemoryWarning {}66- (void)removeFromParentViewController {}67- (BOOL)resignFirstResponder { return 0; }68- (void)restoreStateWithCoder:(NSCoder *)coder {}69- (void)encodeRestorableStateWithCoder:(NSCoder *)coder {}70@end71 72// Do not warn for the implementation in the superclass itself.73@implementation UIViewController74- (void)addChildViewController:(UIViewController *)childController {}75- (void)viewDidAppear:(BOOL)animated {}76- (void)viewDidDisappear:(BOOL)animated {}77- (void)viewDidUnload {}78- (void)viewDidLoad {}79- (void)viewWillUnload {}80- (void)viewWillAppear:(BOOL)animated {}81- (void)viewWillDisappear:(BOOL)animated {}82- (void)didReceiveMemoryWarning {}83- (void)removeFromParentViewController {}84- (void)transitionFromViewController:(UIViewController *)fromViewController85  toViewController:(UIViewController *)toViewController86  duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options87  animations:(void (^)(void))animations88  completion:(void (^)(BOOL finished))completion {}89@end90 91// Warn if UIViewController is our superclass and we do not call super92@interface TestB : UIViewController {}93@end94@implementation TestB95 96- (void)addChildViewController:(UIViewController *)childController {  97  int addChildViewController = 5;98  for (int i = 0; i < addChildViewController; i++)99  	[self viewDidAppear:i];100} // expected-warning {{The 'addChildViewController:' instance method in UIViewController subclass 'TestB' is missing a [super addChildViewController:] call}}101- (void)viewDidAppear:(BOOL)animated {} // expected-warning {{The 'viewDidAppear:' instance method in UIViewController subclass 'TestB' is missing a [super viewDidAppear:] call}}102- (void)viewDidDisappear:(BOOL)animated {} // expected-warning {{The 'viewDidDisappear:' instance method in UIViewController subclass 'TestB' is missing a [super viewDidDisappear:] call}}103- (void)viewDidUnload {} // expected-warning {{The 'viewDidUnload' instance method in UIViewController subclass 'TestB' is missing a [super viewDidUnload] call}}104- (void)viewDidLoad {} // expected-warning {{The 'viewDidLoad' instance method in UIViewController subclass 'TestB' is missing a [super viewDidLoad] call}}105- (void)viewWillUnload {} // expected-warning {{The 'viewWillUnload' instance method in UIViewController subclass 'TestB' is missing a [super viewWillUnload] call}}106- (void)viewWillAppear:(BOOL)animated {} // expected-warning {{The 'viewWillAppear:' instance method in UIViewController subclass 'TestB' is missing a [super viewWillAppear:] call}}107- (void)viewWillDisappear:(BOOL)animated {} // expected-warning {{The 'viewWillDisappear:' instance method in UIViewController subclass 'TestB' is missing a [super viewWillDisappear:] call}}108- (void)didReceiveMemoryWarning {} // expected-warning {{The 'didReceiveMemoryWarning' instance method in UIViewController subclass 'TestB' is missing a [super didReceiveMemoryWarning] call}}109- (void)removeFromParentViewController {} // expected-warning {{The 'removeFromParentViewController' instance method in UIViewController subclass 'TestB' is missing a [super removeFromParentViewController] call}}110 111// Do not warn for methods were it shouldn't112- (void)shouldAutorotate {}113@end114 115// Do not warn if UIViewController is our superclass but we did call super116@interface TestC : UIViewController {}117@end118@implementation TestC119 120- (BOOL)methodReturningStuff {121  return 1;122}123 124- (void)methodDoingStuff {125  [super removeFromParentViewController];126}127 128- (void)addChildViewController:(UIViewController *)childController {129  [super addChildViewController:childController];130}131 132- (void)viewDidAppear:(BOOL)animated {133  [super viewDidAppear:animated];134} 135 136- (void)viewDidDisappear:(BOOL)animated {137  [super viewDidDisappear:animated]; 138}139 140- (void)viewDidUnload {141  [super viewDidUnload];142}143 144- (void)viewDidLoad {145  [super viewDidLoad];146}147 148- (void)viewWillUnload {149  [super viewWillUnload];150} 151 152- (void)viewWillAppear:(BOOL)animated {153  int i = 0; // Also don't start warning just because we do additional stuff154  i++;155  [self viewDidDisappear:i];156  [super viewWillAppear:animated];157} 158 159- (void)viewWillDisappear:(BOOL)animated {160  [super viewWillDisappear:[self methodReturningStuff]];161}162 163- (void)didReceiveMemoryWarning {164  [super didReceiveMemoryWarning];165}166 167// We expect a warning here because at the moment the super-call can't be 168// done from another method.169- (void)removeFromParentViewController { 170  [self methodDoingStuff]; 171} // expected-warning {{The 'removeFromParentViewController' instance method in UIViewController subclass 'TestC' is missing a [super removeFromParentViewController] call}}172@end173 174 175// Do warn for UIResponder subclasses that don't call super176@interface TestD : UIResponder {}177@end178@implementation TestD179 180- (BOOL)resignFirstResponder {181  return 0;182} // expected-warning {{The 'resignFirstResponder' instance method in UIResponder subclass 'TestD' is missing a [super resignFirstResponder] call}}183@end184 185// Do not warn for UIResponder subclasses that do the right thing186@interface TestE : UIResponder {}187@end188@implementation TestE189 190- (BOOL)resignFirstResponder {191  return [super resignFirstResponder];192}193@end194 195// Do warn for NSResponder subclasses that don't call super196@interface TestF : NSResponder {}197@end198@implementation TestF199 200- (void)restoreStateWithCoder:(NSCoder *)coder {201} // expected-warning {{The 'restoreStateWithCoder:' instance method in NSResponder subclass 'TestF' is missing a [super restoreStateWithCoder:] call}}202- (void)encodeRestorableStateWithCoder:(NSCoder *)coder {203} // expected-warning {{The 'encodeRestorableStateWithCoder:' instance method in NSResponder subclass 'TestF' is missing a [super encodeRestorableStateWithCoder:] call}}204@end205 206// Do not warn for NSResponder subclasses that do the right thing207@interface TestG : NSResponder {}208@end209@implementation TestG210 211- (void)restoreStateWithCoder:(NSCoder *)coder {212	[super restoreStateWithCoder:coder];213}214- (void)encodeRestorableStateWithCoder:(NSCoder *)coder {215	[super encodeRestorableStateWithCoder:coder];216}217@end218 219// Do warn for NSDocument subclasses that don't call super220@interface TestH : NSDocument {}221@end222@implementation TestH223 224- (void)restoreStateWithCoder:(NSCoder *)coder {225} // expected-warning {{The 'restoreStateWithCoder:' instance method in NSDocument subclass 'TestH' is missing a [super restoreStateWithCoder:] call}}226- (void)encodeRestorableStateWithCoder:(NSCoder *)coder {227} // expected-warning {{The 'encodeRestorableStateWithCoder:' instance method in NSDocument subclass 'TestH' is missing a [super encodeRestorableStateWithCoder:] call}}228@end229 230// Do not warn for NSDocument subclasses that do the right thing231@interface TestI : NSDocument {}232@end233@implementation TestI234 235- (void)restoreStateWithCoder:(NSCoder *)coder {236	[super restoreStateWithCoder:coder];237}238- (void)encodeRestorableStateWithCoder:(NSCoder *)coder {239	[super encodeRestorableStateWithCoder:coder];240}241@end