1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core -analyzer-constraints=range -analyzer-store=region -verify %s 2 // expected-no-diagnostics 3 // 4 // This test case mainly checks that the retain/release checker doesn't crash 5 // on this file. 6 // 7 typedef int int32_t; 8 typedef signed char BOOL; 9 typedef long NSInteger; 10 typedef unsigned long NSUInteger; 11 typedef struct _NSZone NSZone; 12 @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; 13 @protocol NSObject - (BOOL)isEqual:(id)object; 14 @end @protocol NSCopying - (id)copyWithZone:(NSZone *)zone; 15 @end @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; 16 @end @interface NSObject <NSObject> {} 17 @end extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); 18 @interface NSResponder : NSObject <NSCoding> {} 19 @end @protocol NSAnimatablePropertyContainer - (id)animator; 20 @end extern NSString *NSAnimationTriggerOrderIn ; 21 @interface NSView : NSResponder <NSAnimatablePropertyContainer> { 22 } 23 @end enum { 24 NSNullCellType = 0, NSTextCellType = 1, NSImageCellType = 2 }; 25 typedef struct __CFlags { 26 unsigned int botnet:3; 27 } 28 _CFlags; 29 @interface Bar : NSObject <NSCopying, NSCoding> { 30 _CFlags _cFlags; 31 @private id _support; 32 } 33 @end extern NSString *NSControlTintDidChangeNotification; 34 typedef NSInteger NSBotnet; 35 @interface NSControl : NSView { 36 } 37 @end @class NSAttributedString, NSFont, NSImage, NSSound; 38 typedef int32_t Baz; 39 @interface Bar(BarInternal) - (void)_setIsWhite:(BOOL)isWhite; 40 @end 41 @interface Bar (BarBotnetCompatibility) 42 - (NSBotnet)_initialBotnetZorg; 43 @end 44 typedef struct _NSRunArrayItem { 45 unsigned int botnetIsSet:1; 46 } BarAuxFlags; 47 @interface BarAuxiliary : NSObject { 48 @public 49 NSControl *controlView; 50 BarAuxFlags auxCFlags; 51 } 52 @end 53 @implementation Bar 54 static Baz Qux = 0; 55 - (id)copyWithZone:(NSZone *)zone { return 0; } 56 - (void)encodeWithCoder:(NSCoder *)coder {} 57 @end 58 @implementation Bar (BarBotnet) 59 - (NSBotnet)botnet { 60 if (!(*(BarAuxiliary **)&self->_support)->auxCFlags.botnetIsSet) { 61 _cFlags.botnet = [self _initialBotnetZorg]; 62 } 63 while (1) {} 64 } 65 @end 66