1// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core -pedantic -analyzer-store=region -verify -Wno-objc-root-class %s 2 3// BEGIN delta-debugging reduced header stuff 4 5typedef signed char BOOL; 6typedef unsigned int NSUInteger; 7typedef struct _NSZone NSZone; 8@class NSCoder; 9@protocol NSObject 10- (BOOL)isEqual:(id)object; 11- (id)retain; 12- (oneway void)release; 13@end 14@protocol NSCopying 15- (id)copyWithZone:(NSZone *)zone; 16@end 17@protocol NSCoding 18- (void)encodeWithCoder:(NSCoder *)aCoder; 19@end 20@interface NSObject <NSObject> {} 21- (id)init; 22+ (id)alloc; 23@end 24typedef double NSTimeInterval; 25enum { NSAnimationEaseInOut, NSAnimationEaseIn, NSAnimationEaseOut, NSAnimationLinear }; 26typedef NSUInteger NSAnimationCurve; 27@interface NSAnimation : NSObject <NSCopying, NSCoding> {} 28- (id)initWithDuration:(NSTimeInterval)duration animationCurve:(NSAnimationCurve)animationCurve; 29- (void)startAnimation; 30- (void)setDelegate:(id)delegate; 31@end 32 33// END delta-debugging reduced header stuff 34 35// From NSAnimation Class Reference 36// -(void)startAnimation 37// The receiver retains itself and is then autoreleased at the end 38// of the animation or when it receives stopAnimation. 39 40@interface MyClass { } 41- (void)animationDidEnd:(NSAnimation *)animation; 42@end 43 44@implementation MyClass 45- (void)f1 { 46 // NOTE: The analyzer doesn't really handle this; it just stops tracking 47 // 'animation' when it is sent the message 'setDelegate:'. 48 NSAnimation *animation = [[NSAnimation alloc] // no-warning 49 initWithDuration:1.0 50 animationCurve:NSAnimationEaseInOut]; 51 52 [animation setDelegate:self]; 53 [animation startAnimation]; 54} 55 56- (void)f2 { 57 NSAnimation *animation = [[NSAnimation alloc] // expected-warning{{leak}} 58 initWithDuration:1.0 59 animationCurve:NSAnimationEaseInOut]; 60 61 [animation startAnimation]; 62} 63 64- (void)animationDidEnd:(NSAnimation *)animation { 65 [animation release]; 66} 67@end 68