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