1*89a1d03eSRichard// RUN: %check_clang_tidy %s objc-missing-hash %t 2*89a1d03eSRichard 3*89a1d03eSRichardtypedef _Bool BOOL; 4*89a1d03eSRichard#define YES 1 5*89a1d03eSRichard#define NO 0 6*89a1d03eSRichardtypedef unsigned int NSUInteger; 7*89a1d03eSRichardtypedef void *id; 8*89a1d03eSRichard 9*89a1d03eSRichard@interface NSObject 10*89a1d03eSRichard- (NSUInteger)hash; 11*89a1d03eSRichard- (BOOL)isEqual:(id)object; 12*89a1d03eSRichard@end 13*89a1d03eSRichard 14*89a1d03eSRichard@interface MissingHash : NSObject 15*89a1d03eSRichard@end 16*89a1d03eSRichard 17*89a1d03eSRichard@implementation MissingHash 18*89a1d03eSRichard// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: 'MissingHash' implements -isEqual: without implementing -hash [objc-missing-hash] 19*89a1d03eSRichard 20*89a1d03eSRichard- (BOOL)isEqual:(id)object { 21*89a1d03eSRichard return YES; 22*89a1d03eSRichard} 23*89a1d03eSRichard 24*89a1d03eSRichard@end 25*89a1d03eSRichard 26*89a1d03eSRichard@interface HasHash : NSObject 27*89a1d03eSRichard@end 28*89a1d03eSRichard 29*89a1d03eSRichard@implementation HasHash 30*89a1d03eSRichard 31*89a1d03eSRichard- (NSUInteger)hash { 32*89a1d03eSRichard return 0; 33*89a1d03eSRichard} 34*89a1d03eSRichard 35*89a1d03eSRichard- (BOOL)isEqual:(id)object { 36*89a1d03eSRichard return YES; 37*89a1d03eSRichard} 38*89a1d03eSRichard 39*89a1d03eSRichard@end 40*89a1d03eSRichard 41*89a1d03eSRichard@interface NSArray : NSObject 42*89a1d03eSRichard@end 43*89a1d03eSRichard 44*89a1d03eSRichard@interface MayHaveInheritedHash : NSArray 45*89a1d03eSRichard@end 46*89a1d03eSRichard 47*89a1d03eSRichard@implementation MayHaveInheritedHash 48*89a1d03eSRichard 49*89a1d03eSRichard- (BOOL)isEqual:(id)object { 50*89a1d03eSRichard return YES; 51*89a1d03eSRichard} 52*89a1d03eSRichard 53*89a1d03eSRichard@end 54*89a1d03eSRichard 55*89a1d03eSRichard@interface AnotherRootClass 56*89a1d03eSRichard@end 57*89a1d03eSRichard 58*89a1d03eSRichard@interface NotDerivedFromNSObject : AnotherRootClass 59*89a1d03eSRichard@end 60*89a1d03eSRichard 61*89a1d03eSRichard@implementation NotDerivedFromNSObject 62*89a1d03eSRichard 63*89a1d03eSRichard- (BOOL)isEqual:(id)object { 64*89a1d03eSRichard return NO; 65*89a1d03eSRichard} 66*89a1d03eSRichard 67*89a1d03eSRichard@end 68*89a1d03eSRichard 69