blob: 22af2ac6ae998c1a634797e160fafe006b518494 [file] [log] [blame]
// RUN: %check_clang_tidy %s llvm-prefer-register-over-unsigned %t
namespace llvm {
class Register {
public:
operator unsigned();
unsigned Reg;
};
// This class shouldn't trigger it despite the similarity.
class RegisterLike {
public:
operator unsigned();
unsigned Reg;
};
} // end namespace llvm
llvm::Register getReg();
llvm::RegisterLike getRegLike();
void apply_1() {
unsigned Reg1 = getReg();
// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'Reg1' declared as 'unsigned int'; use 'llvm::Register' instead [llvm-prefer-register-over-unsigned]
// CHECK-FIXES: apply_1()
// CHECK-FIXES-NEXT: llvm::Register Reg1 = getReg();
}
void apply_2() {
using namespace llvm;
unsigned Reg2 = getReg();
// FIXME: Function-scoped UsingDirectiveDecl's don't appear to be in the
// DeclContext for the function so we can't elide the llvm:: in this
// case. Fortunately, it doesn't actually occur in the LLVM code base.
// CHECK-MESSAGES: :[[@LINE-4]]:12: warning: variable 'Reg2' declared as 'unsigned int'; use 'llvm::Register' instead [llvm-prefer-register-over-unsigned]
// CHECK-FIXES: apply_2()
// CHECK-FIXES-NEXT: using namespace llvm;
// CHECK-FIXES-NEXT: llvm::Register Reg2 = getReg();
}
namespace llvm {
void apply_3() {
unsigned Reg3 = getReg();
// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: variable 'Reg3' declared as 'unsigned int'; use 'Register' instead [llvm-prefer-register-over-unsigned]
// CHECK-FIXES: apply_3()
// CHECK-FIXES-NEXT: Register Reg3 = getReg();
}
} // end namespace llvm
void done_1() {
llvm::Register Reg1 = getReg();
// CHECK-FIXES: done_1()
// CHECK-FIXES-NEXT: llvm::Register Reg1 = getReg();
}
void done_2() {
using namespace llvm;
Register Reg2 = getReg();
// CHECK-FIXES: done_2()
// CHECK-FIXES-NEXT: using namespace llvm;
// CHECK-FIXES-NEXT: Register Reg2 = getReg();
}
namespace llvm {
void done_3() {
Register Reg3 = getReg();
// CHECK-FIXES: done_3()
// CHECK-FIXES-NEXT: Register Reg3 = getReg();
}
} // end namespace llvm
void do_nothing_1() {
unsigned Reg1 = getRegLike();
// CHECK-FIXES: do_nothing_1()
// CHECK-FIXES-NEXT: unsigned Reg1 = getRegLike();
}
void do_nothing_2() {
using namespace llvm;
unsigned Reg2 = getRegLike();
// CHECK-FIXES: do_nothing_2()
// CHECK-FIXES-NEXT: using namespace llvm;
// CHECK-FIXES-NEXT: unsigned Reg2 = getRegLike();
}
namespace llvm {
void do_nothing_3() {
unsigned Reg3 = getRegLike();
// CHECK-FIXES: do_nothing_3()
// CHECK-FIXES-NEXT: unsigned Reg3 = getRegLike();
}
} // end namespace llvm
void fn1(llvm::Register R);
void do_nothing_4() {
fn1(getReg());
// CHECK-FIXES: do_nothing_4()
// CHECK-FIXES-NEXT: fn1(getReg());
}
void fn2(unsigned R);
void do_nothing_5() {
fn2(getReg());
// CHECK-FIXES: do_nothing_5()
// CHECK-FIXES-NEXT: fn2(getReg());
}
void do_nothing_6() {
using namespace llvm;
Register Reg6{getReg()};
// CHECK-FIXES: do_nothing_6()
// CHECK-FIXES-NEXT: using namespace llvm;
// CHECK-FIXES-NEXT: Register Reg6{getReg()};
}
void do_nothing_7() {
using namespace llvm;
Register Reg7;
Reg7.Reg = getReg();
// CHECK-FIXES: do_nothing_7()
// CHECK-FIXES-NEXT: using namespace llvm;
// CHECK-FIXES-NEXT: Register Reg7;
// CHECK-FIXES-NEXT: Reg7.Reg = getReg();
}
void do_nothing_8() {
using namespace llvm;
RegisterLike Reg8{getReg()};
// CHECK-FIXES: do_nothing_8()
// CHECK-FIXES-NEXT: using namespace llvm;
// CHECK-FIXES-NEXT: RegisterLike Reg8{getReg()};
}
void do_nothing_9() {
using namespace llvm;
RegisterLike Reg9;
Reg9.Reg = getReg();
// CHECK-FIXES: do_nothing_9()
// CHECK-FIXES-NEXT: using namespace llvm;
// CHECK-FIXES-NEXT: RegisterLike Reg9;
// CHECK-FIXES-NEXT: Reg9.Reg = getReg();
}