| // RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core -pedantic -analyzer-store=region -verify -Wno-objc-root-class %s |
| |
| // BEGIN delta-debugging reduced header stuff |
| |
| typedef signed char BOOL; |
| typedef unsigned int NSUInteger; |
| typedef struct _NSZone NSZone; |
| @class NSCoder; |
| @protocol NSObject |
| - (BOOL)isEqual:(id)object; |
| - (id)retain; |
| - (oneway void)release; |
| @end |
| @protocol NSCopying |
| - (id)copyWithZone:(NSZone *)zone; |
| @end |
| @protocol NSCoding |
| - (void)encodeWithCoder:(NSCoder *)aCoder; |
| @end |
| @interface NSObject <NSObject> {} |
| - (id)init; |
| + (id)alloc; |
| @end |
| typedef double NSTimeInterval; |
| enum { NSAnimationEaseInOut, NSAnimationEaseIn, NSAnimationEaseOut, NSAnimationLinear }; |
| typedef NSUInteger NSAnimationCurve; |
| @interface NSAnimation : NSObject <NSCopying, NSCoding> {} |
| - (id)initWithDuration:(NSTimeInterval)duration animationCurve:(NSAnimationCurve)animationCurve; |
| - (void)startAnimation; |
| - (void)setDelegate:(id)delegate; |
| @end |
| |
| // END delta-debugging reduced header stuff |
| |
| // From NSAnimation Class Reference |
| // -(void)startAnimation |
| // The receiver retains itself and is then autoreleased at the end |
| // of the animation or when it receives stopAnimation. |
| |
| @interface MyClass { } |
| - (void)animationDidEnd:(NSAnimation *)animation; |
| @end |
| |
| @implementation MyClass |
| - (void)f1 { |
| // NOTE: The analyzer doesn't really handle this; it just stops tracking |
| // 'animation' when it is sent the message 'setDelegate:'. |
| NSAnimation *animation = [[NSAnimation alloc] // no-warning |
| initWithDuration:1.0 |
| animationCurve:NSAnimationEaseInOut]; |
| |
| [animation setDelegate:self]; |
| [animation startAnimation]; |
| } |
| |
| - (void)f2 { |
| NSAnimation *animation = [[NSAnimation alloc] // expected-warning{{leak}} |
| initWithDuration:1.0 |
| animationCurve:NSAnimationEaseInOut]; |
| |
| [animation startAnimation]; |
| } |
| |
| - (void)animationDidEnd:(NSAnimation *)animation { |
| [animation release]; |
| } |
| @end |