xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/objc/missing-hash.m (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
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