assume-super-init-does-not-return-nil.m revision 05fcbd3dc28f4cba4a6d33e7aeaabb5f6f7837e3
1// RUN: %clang_cc1 -analyze -analyzer-ipa=dynamic-bifurcate -analyzer-checker=core,osx -verify %s
2
3typedef signed char BOOL;
4
5@protocol NSObject  - (BOOL)isEqual:(id)object; @end
6@interface NSObject <NSObject> {}
7+(id)alloc;
8+(id)new;
9-(id)init;
10-(id)autorelease;
11-(id)copy;
12- (Class)class;
13-(id)retain;
14- (oneway void)release;
15@end
16
17@interface Cell : NSObject {
18  int x;
19}
20- (id) init;
21- (void)test;
22@end
23
24@implementation Cell
25- (id) init {
26  if ((self = [super init])) {
27    ;
28  }
29  // Test that this is being analyzed.
30  int m;
31  m = m + 1; //expected-warning {{The left operand of '+' is a garbage value}}
32  return self;
33}
34
35// Make sure that we do not propagate the 'nil' check from inlined 'init' to 'test'.
36- (void) test {
37  Cell *newCell = [[Cell alloc] init];
38  newCell->x = 5; // no-warning
39  [newCell release];
40}
41@end
42