unused-ivars.m revision ef74f4c6dcd59b3af1de9d8f613c1caf3e6cb63d
1// RUN: clang -cc1 -fblocks -analyze -warn-objc-unused-ivars %s -verify 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