Home | History | Annotate | Download | only in inlining
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-config ipa=dynamic-bifurcate -verify %s
      2 
      3 typedef signed char BOOL;
      4 @protocol NSObject  - (BOOL)isEqual:(id)object; @end
      5 @interface NSObject <NSObject> {}
      6 +(id)alloc;
      7 -(id)init;
      8 +(id)new;
      9 -(id)autorelease;
     10 -(id)copy;
     11 - (Class)class;
     12 -(id)retain;
     13 @end
     14 void clang_analyzer_eval(BOOL);
     15 
     16 @interface SomeOtherClass : NSObject
     17 - (int)getZero;
     18 @end
     19 @implementation SomeOtherClass
     20 - (int)getZero { return 0; }
     21 @end
     22 
     23 @interface MyClass : NSObject
     24 - (int)getZero;
     25 @end
     26 
     27 @implementation MyClass
     28 - (int)getZero { return 1; }
     29 
     30 // TODO: Not only we should correctly determine that the type of o at runtime 
     31 // is MyClass, but we should also warn about it. 
     32 + (void) testCastToParent {
     33   id a = [[self alloc] init];
     34   SomeOtherClass *o = a;  
     35   clang_analyzer_eval([o getZero] == 0); // expected-warning{{FALSE}}
     36 }
     37 @end
     38