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