xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/llvm/prefer-register-over-unsigned.cpp (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard // RUN: %check_clang_tidy %s llvm-prefer-register-over-unsigned %t
2*89a1d03eSRichard 
3*89a1d03eSRichard namespace llvm {
4*89a1d03eSRichard class Register {
5*89a1d03eSRichard public:
6*89a1d03eSRichard   operator unsigned();
7*89a1d03eSRichard 
8*89a1d03eSRichard   unsigned Reg;
9*89a1d03eSRichard };
10*89a1d03eSRichard 
11*89a1d03eSRichard // This class shouldn't trigger it despite the similarity.
12*89a1d03eSRichard class RegisterLike {
13*89a1d03eSRichard public:
14*89a1d03eSRichard   operator unsigned();
15*89a1d03eSRichard 
16*89a1d03eSRichard   unsigned Reg;
17*89a1d03eSRichard };
18*89a1d03eSRichard } // end namespace llvm
19*89a1d03eSRichard 
20*89a1d03eSRichard llvm::Register getReg();
21*89a1d03eSRichard llvm::RegisterLike getRegLike();
22*89a1d03eSRichard 
apply_1()23*89a1d03eSRichard void apply_1() {
24*89a1d03eSRichard   unsigned Reg1 = getReg();
25*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'Reg1' declared as 'unsigned int'; use 'llvm::Register' instead [llvm-prefer-register-over-unsigned]
26*89a1d03eSRichard   // CHECK-FIXES: apply_1()
27*89a1d03eSRichard   // CHECK-FIXES-NEXT: llvm::Register Reg1 = getReg();
28*89a1d03eSRichard }
29*89a1d03eSRichard 
apply_2()30*89a1d03eSRichard void apply_2() {
31*89a1d03eSRichard   using namespace llvm;
32*89a1d03eSRichard   unsigned Reg2 = getReg();
33*89a1d03eSRichard   // FIXME: Function-scoped UsingDirectiveDecl's don't appear to be in the
34*89a1d03eSRichard   //        DeclContext for the function so we can't elide the llvm:: in this
35*89a1d03eSRichard   //        case. Fortunately, it doesn't actually occur in the LLVM code base.
36*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-4]]:12: warning: variable 'Reg2' declared as 'unsigned int'; use 'llvm::Register' instead [llvm-prefer-register-over-unsigned]
37*89a1d03eSRichard   // CHECK-FIXES: apply_2()
38*89a1d03eSRichard   // CHECK-FIXES-NEXT: using namespace llvm;
39*89a1d03eSRichard   // CHECK-FIXES-NEXT: llvm::Register Reg2 = getReg();
40*89a1d03eSRichard }
41*89a1d03eSRichard 
42*89a1d03eSRichard namespace llvm {
apply_3()43*89a1d03eSRichard void apply_3() {
44*89a1d03eSRichard   unsigned Reg3 = getReg();
45*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'Reg3' declared as 'unsigned int'; use 'Register' instead [llvm-prefer-register-over-unsigned]
46*89a1d03eSRichard   // CHECK-FIXES: apply_3()
47*89a1d03eSRichard   // CHECK-FIXES-NEXT: Register Reg3 = getReg();
48*89a1d03eSRichard }
49*89a1d03eSRichard } // end namespace llvm
50*89a1d03eSRichard 
done_1()51*89a1d03eSRichard void done_1() {
52*89a1d03eSRichard   llvm::Register Reg1 = getReg();
53*89a1d03eSRichard   // CHECK-FIXES: done_1()
54*89a1d03eSRichard   // CHECK-FIXES-NEXT: llvm::Register Reg1 = getReg();
55*89a1d03eSRichard }
56*89a1d03eSRichard 
done_2()57*89a1d03eSRichard void done_2() {
58*89a1d03eSRichard   using namespace llvm;
59*89a1d03eSRichard   Register Reg2 = getReg();
60*89a1d03eSRichard   // CHECK-FIXES: done_2()
61*89a1d03eSRichard   // CHECK-FIXES-NEXT: using namespace llvm;
62*89a1d03eSRichard   // CHECK-FIXES-NEXT: Register Reg2 = getReg();
63*89a1d03eSRichard }
64*89a1d03eSRichard 
65*89a1d03eSRichard namespace llvm {
done_3()66*89a1d03eSRichard void done_3() {
67*89a1d03eSRichard   Register Reg3 = getReg();
68*89a1d03eSRichard   // CHECK-FIXES: done_3()
69*89a1d03eSRichard   // CHECK-FIXES-NEXT: Register Reg3 = getReg();
70*89a1d03eSRichard }
71*89a1d03eSRichard } // end namespace llvm
72*89a1d03eSRichard 
do_nothing_1()73*89a1d03eSRichard void do_nothing_1() {
74*89a1d03eSRichard   unsigned Reg1 = getRegLike();
75*89a1d03eSRichard   // CHECK-FIXES: do_nothing_1()
76*89a1d03eSRichard   // CHECK-FIXES-NEXT: unsigned Reg1 = getRegLike();
77*89a1d03eSRichard }
78*89a1d03eSRichard 
do_nothing_2()79*89a1d03eSRichard void do_nothing_2() {
80*89a1d03eSRichard   using namespace llvm;
81*89a1d03eSRichard   unsigned Reg2 = getRegLike();
82*89a1d03eSRichard   // CHECK-FIXES: do_nothing_2()
83*89a1d03eSRichard   // CHECK-FIXES-NEXT: using namespace llvm;
84*89a1d03eSRichard   // CHECK-FIXES-NEXT: unsigned Reg2 = getRegLike();
85*89a1d03eSRichard }
86*89a1d03eSRichard 
87*89a1d03eSRichard namespace llvm {
do_nothing_3()88*89a1d03eSRichard void do_nothing_3() {
89*89a1d03eSRichard   unsigned Reg3 = getRegLike();
90*89a1d03eSRichard   // CHECK-FIXES: do_nothing_3()
91*89a1d03eSRichard   // CHECK-FIXES-NEXT: unsigned Reg3 = getRegLike();
92*89a1d03eSRichard }
93*89a1d03eSRichard } // end namespace llvm
94*89a1d03eSRichard 
95*89a1d03eSRichard void fn1(llvm::Register R);
do_nothing_4()96*89a1d03eSRichard void do_nothing_4() {
97*89a1d03eSRichard   fn1(getReg());
98*89a1d03eSRichard   // CHECK-FIXES: do_nothing_4()
99*89a1d03eSRichard   // CHECK-FIXES-NEXT: fn1(getReg());
100*89a1d03eSRichard }
101*89a1d03eSRichard 
102*89a1d03eSRichard void fn2(unsigned R);
do_nothing_5()103*89a1d03eSRichard void do_nothing_5() {
104*89a1d03eSRichard   fn2(getReg());
105*89a1d03eSRichard   // CHECK-FIXES: do_nothing_5()
106*89a1d03eSRichard   // CHECK-FIXES-NEXT: fn2(getReg());
107*89a1d03eSRichard }
108*89a1d03eSRichard 
do_nothing_6()109*89a1d03eSRichard void do_nothing_6() {
110*89a1d03eSRichard   using namespace llvm;
111*89a1d03eSRichard   Register Reg6{getReg()};
112*89a1d03eSRichard   // CHECK-FIXES: do_nothing_6()
113*89a1d03eSRichard   // CHECK-FIXES-NEXT: using namespace llvm;
114*89a1d03eSRichard   // CHECK-FIXES-NEXT: Register Reg6{getReg()};
115*89a1d03eSRichard }
116*89a1d03eSRichard 
do_nothing_7()117*89a1d03eSRichard void do_nothing_7() {
118*89a1d03eSRichard   using namespace llvm;
119*89a1d03eSRichard   Register Reg7;
120*89a1d03eSRichard   Reg7.Reg = getReg();
121*89a1d03eSRichard   // CHECK-FIXES: do_nothing_7()
122*89a1d03eSRichard   // CHECK-FIXES-NEXT: using namespace llvm;
123*89a1d03eSRichard   // CHECK-FIXES-NEXT: Register Reg7;
124*89a1d03eSRichard   // CHECK-FIXES-NEXT: Reg7.Reg = getReg();
125*89a1d03eSRichard }
126*89a1d03eSRichard 
do_nothing_8()127*89a1d03eSRichard void do_nothing_8() {
128*89a1d03eSRichard   using namespace llvm;
129*89a1d03eSRichard   RegisterLike Reg8{getReg()};
130*89a1d03eSRichard   // CHECK-FIXES: do_nothing_8()
131*89a1d03eSRichard   // CHECK-FIXES-NEXT: using namespace llvm;
132*89a1d03eSRichard   // CHECK-FIXES-NEXT: RegisterLike Reg8{getReg()};
133*89a1d03eSRichard }
134*89a1d03eSRichard 
do_nothing_9()135*89a1d03eSRichard void do_nothing_9() {
136*89a1d03eSRichard   using namespace llvm;
137*89a1d03eSRichard   RegisterLike Reg9;
138*89a1d03eSRichard   Reg9.Reg = getReg();
139*89a1d03eSRichard   // CHECK-FIXES: do_nothing_9()
140*89a1d03eSRichard   // CHECK-FIXES-NEXT: using namespace llvm;
141*89a1d03eSRichard   // CHECK-FIXES-NEXT: RegisterLike Reg9;
142*89a1d03eSRichard   // CHECK-FIXES-NEXT: Reg9.Reg = getReg();
143*89a1d03eSRichard }
144