ObjCDynTypePopagation.m revision c7ecc43c33a21b82c49664910b19fcc1f555aa51
17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=dynamic -verify %s
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtypedef signed char BOOL;
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid clang_analyzer_eval(BOOL);
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch@protocol NSObject  - (BOOL)isEqual:(id)object; @end
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)@interface NSObject <NSObject> {}
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)+(id)alloc;
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)-(id)init;
111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)+(id)new;
121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)-(id)autorelease;
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch-(id)copy;
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)- (Class)class;
15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch-(id)retain;
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)@end
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch@interface MyParent : NSObject
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch- (int)getZeroOverridden;
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)@end
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch@implementation MyParent
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)- (int) getZeroOverridden {
231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   return 1;
241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)- (int) getZero {
261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   return 0;
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)@end
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)@interface MyClass : MyParent
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)- (int) getZeroOverridden;
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch@end
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)MyClass *getObj();
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)@implementation MyClass
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)- (int) getZeroOverridden {
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   return 0;
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)/* Test that we get the right type from call to alloc. */
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)+ (void) testAllocSelf {
441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) id a = [self alloc];
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) clang_analyzer_eval([a getZeroOverridden] == 0); // expected-warning{{TRUE}}
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)+ (void) testAllocClass {
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  id a = [MyClass alloc];
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  clang_analyzer_eval([a getZeroOverridden] == 0); // expected-warning{{TRUE}}
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)+ (void) testAllocSuperOverriden {
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  id a = [super alloc];
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Evaluates to 1 in the parent.
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  clang_analyzer_eval([a getZeroOverridden] == 0); // expected-warning{{FALSE}} 
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)+ (void) testAllocSuper {
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  id a = [super alloc];
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  clang_analyzer_eval([a getZero] == 0); // expected-warning{{TRUE}}
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)+ (void) testAllocInit {
661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  id a = [[self alloc] init];
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  clang_analyzer_eval([a getZeroOverridden] == 0); // expected-warning{{TRUE}}
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)+ (void) testNewSelf {
711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) id a = [self new];
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) clang_analyzer_eval([a getZeroOverridden] == 0); // expected-warning{{TRUE}}
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)@end