1// RUN: %clang_cc1 -fblocks -analyze -analyzer-checker=osx.cocoa.UnusedIvars -verify -Wno-objc-root-class %s 2 3//===--- BEGIN: Delta-debugging reduced headers. --------------------------===// 4 5@protocol NSObject 6- (id)retain; 7- (oneway void)release; 8@end 9@interface NSObject <NSObject> {} 10- (id)init; 11+ (id)alloc; 12@end 13 14//===--- END: Delta-debugging reduced headers. ----------------------------===// 15 16// This test case tests the basic functionality of the unused ivar test. 17@interface TestA { 18@private 19 int x; // expected-warning {{Instance variable 'x' in class 'TestA' is never used}} 20} 21@end 22@implementation TestA @end 23 24// This test case tests whether the unused ivar check handles blocks that 25// reference an instance variable. (<rdar://problem/7075531>) 26@interface TestB : NSObject { 27@private 28 id _ivar; // no-warning 29} 30@property (readwrite,retain) id ivar; 31@end 32 33@implementation TestB 34- (id)ivar { 35 __attribute__((__blocks__(byref))) id value = ((void*)0); 36 void (^b)() = ^{ value = _ivar; }; 37 b(); 38 return value; 39} 40 41- (void)setIvar:(id)newValue { 42 void (^b)() = ^{ [_ivar release]; _ivar = [newValue retain]; }; 43 b(); 44} 45@end 46 47//===----------------------------------------------------------------------===// 48// <rdar://problem/6260004> Detect that ivar is in use, if used in category 49// in the same file as the implementation 50//===----------------------------------------------------------------------===// 51 52@protocol Protocol6260004 53- (id) getId; 54@end 55 56@interface RDar6260004 { 57@private 58 id x; // no-warning 59} 60@end 61@implementation RDar6260004 @end 62@implementation RDar6260004 (Protocol6260004) 63- (id) getId { 64 return x; 65} 66@end 67 68//===----------------------------------------------------------------------===// 69// <rdar://problem/7254495> - ivars referenced by lexically nested functions 70// should not be flagged as unused 71//===----------------------------------------------------------------------===// 72 73@interface RDar7254495 { 74@private 75 int x; // no-warning 76} 77@end 78 79@implementation RDar7254495 80int radar_7254495(RDar7254495 *a) { 81 return a->x; 82} 83@end 84 85//===----------------------------------------------------------------------===// 86// <rdar://problem/7353683> - consult attribute((unused)) to silence warnings 87// about unused instance variables 88//===----------------------------------------------------------------------===// 89 90@interface RDar7353683 { 91@private 92 id x __attribute__((unused)); 93} 94@end 95 96@implementation RDar7353683 97@end 98//===----------------------------------------------------------------------===// 99// <rdar://problem/8481311> Unused bitfield ivars trigger cause weird 100// diagnostic: "Instance variable '' in class..." 101//===----------------------------------------------------------------------===// 102 103@interface RDar8481311 { 104@private 105 unsigned bitfield:1; // expected-warning {{Instance variable 'bitfield' in class 'RDar8481311' is never used}} 106} 107@end 108 109@implementation RDar8481311 110@end 111 112@class NSString; 113@interface Radar11059352_1 { 114@private 115 NSString *_pathString; 116} 117@property (readonly, strong) NSString *pathString; 118@end 119 120@interface Radar11059352 { 121@private 122Radar11059352_1 *_workspacePath; 123} 124@end 125 126@implementation Radar11059352 127 128- (void)useWorkspace { 129 NSString *workspacePathString = _workspacePath.pathString; 130} 131@end