1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core,deadcode.DeadStores -analyzer-store=region -analyzer-constraints=range -verify %s 2 3 // These declarations were reduced using Delta-Debugging from Foundation.h 4 // on Mac OS X. The test cases are below. 5 6 typedef struct objc_selector *SEL; 7 typedef signed char BOOL; 8 typedef unsigned int NSUInteger; 9 @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; 10 @protocol NSObject 11 - (BOOL)isEqual:(id)object; 12 - (id)retain; 13 @end 14 @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; 15 @end 16 @interface NSObject <NSObject> {} 17 + (id)alloc; 18 @end 19 typedef float CGFloat; 20 typedef struct _NSPoint {} NSRect; 21 NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h); 22 enum { NSBackingStoreRetained = 0, NSBackingStoreNonretained = 1, NSBackingStoreBuffered = 2 }; 23 typedef NSUInteger NSBackingStoreType; 24 @interface NSResponder : NSObject <NSCoding> {} 25 @end 26 @protocol NSAnimatablePropertyContainer 27 - (id)animator; 28 @end 29 extern NSString *NSAnimationTriggerOrderIn ; 30 @class CIFilter, CALayer, NSDictionary, NSScreen, NSShadow, NSTrackingArea; 31 @interface NSView : NSResponder <NSAnimatablePropertyContainer> {} @end 32 @protocol NSValidatedUserInterfaceItem - (SEL)action; @end 33 @protocol NSUserInterfaceValidations - (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem; @end @class NSNotification, NSText, NSView, NSMutableSet, NSSet, NSDate; 34 enum { NSBorderlessWindowMask = 0, NSTitledWindowMask = 1 << 0, NSClosableWindowMask = 1 << 1, NSMiniaturizableWindowMask = 1 << 2, NSResizableWindowMask = 1 << 3 }; 35 @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceValidations> { 36 struct __wFlags {} _wFlags; 37 } 38 - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag; 39 - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag screen:(NSScreen *)screen; 40 - (void)orderFrontRegardless; 41 @end 42 43 extern NSString *NSWindowDidBecomeKeyNotification; 44 45 // Test cases. 46 47 void f1() { 48 NSWindow *window = [[NSWindow alloc] 49 initWithContentRect:NSMakeRect(0,0,100,100) 50 styleMask:NSTitledWindowMask|NSClosableWindowMask 51 backing:NSBackingStoreBuffered 52 defer:0]; 53 54 [window orderFrontRegardless]; // no-warning 55 } 56 57 void f2() { 58 NSWindow *window = [[NSWindow alloc] 59 initWithContentRect:NSMakeRect(0,0,100,100) 60 styleMask:NSTitledWindowMask|NSClosableWindowMask 61 backing:NSBackingStoreBuffered 62 defer:0 63 screen:0]; 64 65 [window orderFrontRegardless]; // no-warning 66 } 67 68 void f2b() { 69 // FIXME: NSWindow doesn't own itself until it is displayed. 70 NSWindow *window = [[NSWindow alloc] // no-warning 71 initWithContentRect:NSMakeRect(0,0,100,100) 72 styleMask:NSTitledWindowMask|NSClosableWindowMask 73 backing:NSBackingStoreBuffered 74 defer:0 75 screen:0]; 76 77 [window orderFrontRegardless]; 78 79 [window retain]; 80 } 81 82 83 void f3() { 84 // FIXME: For now we don't track NSWindow. 85 NSWindow *window = [NSWindow alloc]; // expected-warning{{never read}} 86 } 87