1*89a1d03eSRichard// RUN: %check_clang_tidy %s objc-dealloc-in-category %t 2*89a1d03eSRichard 3*89a1d03eSRichard@interface NSObject 4*89a1d03eSRichard// Used to quash warning about missing base class. 5*89a1d03eSRichard- (void)dealloc; 6*89a1d03eSRichard@end 7*89a1d03eSRichard 8*89a1d03eSRichard@interface Foo : NSObject 9*89a1d03eSRichard@end 10*89a1d03eSRichard 11*89a1d03eSRichard@implementation Foo 12*89a1d03eSRichard- (void)dealloc { 13*89a1d03eSRichard // No warning should be generated here. 14*89a1d03eSRichard} 15*89a1d03eSRichard@end 16*89a1d03eSRichard 17*89a1d03eSRichard@interface Bar : NSObject 18*89a1d03eSRichard@end 19*89a1d03eSRichard 20*89a1d03eSRichard@interface Bar (BarCategory) 21*89a1d03eSRichard@end 22*89a1d03eSRichard 23*89a1d03eSRichard@implementation Bar (BarCategory) 24*89a1d03eSRichard+ (void)dealloc { 25*89a1d03eSRichard // Should not trigger on class methods. 26*89a1d03eSRichard} 27*89a1d03eSRichard 28*89a1d03eSRichard- (void)dealloc { 29*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: category 'BarCategory' should not implement -dealloc [objc-dealloc-in-category] 30*89a1d03eSRichard} 31*89a1d03eSRichard@end 32*89a1d03eSRichard 33*89a1d03eSRichard@interface Baz : NSObject 34*89a1d03eSRichard@end 35*89a1d03eSRichard 36*89a1d03eSRichard@implementation Baz 37*89a1d03eSRichard- (void)dealloc { 38*89a1d03eSRichard // Should not trigger on implementation in the class itself, even with 39*89a1d03eSRichard // it declared in the category (below). 40*89a1d03eSRichard} 41*89a1d03eSRichard@end 42*89a1d03eSRichard 43*89a1d03eSRichard@interface Baz (BazCategory) 44*89a1d03eSRichard// A declaration in a category @interface does not by itself provide an 45*89a1d03eSRichard// overriding implementation, and should not generate a warning. 46*89a1d03eSRichard- (void)dealloc; 47*89a1d03eSRichard@end 48