129 lines · cpp
1// RUN: %check_clang_tidy -std=c++20-or-later %s modernize-use-integer-sign-comparison %t2 3// CHECK-FIXES: #include <utility>4 5// The code that triggers the check6#define MAX_MACRO(a, b) (a < b) ? b : a7 8unsigned int FuncParameters(int bla) {9 unsigned int result = 0;10 if (result == bla)11 return 0;12// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]13// CHECK-FIXES: if (std::cmp_equal(result , bla))14 15 return 1;16}17 18template <typename T>19void TemplateFuncParameter(T val) {20 unsigned long uL = 0;21 if (val >= uL)22 return;23// CHECK-MESSAGES-NOT: warning:24}25 26template <typename T1, typename T2>27int TemplateFuncParameters(T1 val1, T2 val2) {28 if (val1 >= val2)29 return 0;30// CHECK-MESSAGES-NOT: warning:31 return 1;32}33 34int AllComparisons() {35 unsigned int uVar = 42;36 unsigned short uArray[7] = {0, 1, 2, 3, 9, 7, 9};37 38 int sVar = -42;39 short sArray[7] = {-1, -2, -8, -94, -5, -4, -6};40 41 enum INT_TEST {42 VAL1 = 0,43 VAL2 = -144 };45 46 char ch = 'a';47 unsigned char uCh = 'a';48 signed char sCh = 'a';49 bool bln = false;50 51 if (bln == sVar)52 return 0;53// CHECK-MESSAGES-NOT: warning:54 55 if (ch > uCh)56 return 0;57// CHECK-MESSAGES-NOT: warning:58 59 if (sVar <= INT_TEST::VAL2)60 return 0;61// CHECK-MESSAGES-NOT: warning:62 63 if (uCh < sCh)64 return -1;65// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]66// CHECK-FIXES: if (std::cmp_less(uCh , sCh))67 68 if ((int)uVar < sVar)69 return 0;70// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]71// CHECK-FIXES: if (std::cmp_less(uVar, sVar))72 73 (uVar != sVar) ? uVar = sVar74 : sVar = uVar;75// CHECK-MESSAGES: :[[@LINE-2]]:6: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]76// CHECK-FIXES: (std::cmp_not_equal(uVar , sVar)) ? uVar = sVar77 78 while (uArray[0] <= sArray[0])79 return 0;80// CHECK-MESSAGES: :[[@LINE-2]]:12: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]81// CHECK-FIXES: while (std::cmp_less_equal(uArray[0] , sArray[0]))82 83 if (uArray[1] > sArray[1])84 return 0;85// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]86// CHECK-FIXES: if (std::cmp_greater(uArray[1] , sArray[1]))87 88 MAX_MACRO(uVar, sArray[0]);89// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]90 91 if (static_cast<unsigned int>(uArray[2]) < static_cast<int>(sArray[2]))92 return 0;93// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]94// CHECK-FIXES: if (std::cmp_less(uArray[2],sArray[2]))95 96 if ((unsigned int)uArray[3] < (int)sArray[3])97 return 0;98// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]99// CHECK-FIXES: if (std::cmp_less(uArray[3],sArray[3]))100 101 if ((unsigned int)(uArray[4]) < (int)(sArray[4]))102 return 0;103// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]104// CHECK-FIXES: if (std::cmp_less((uArray[4]),(sArray[4])))105 106 if (uArray[5] > sArray[5])107 return 0;108// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]109// CHECK-FIXES: if (std::cmp_greater(uArray[5] , sArray[5]))110 111 #define VALUE sArray[6]112 if (uArray[6] > VALUE)113 return 0;114// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]115// CHECK-FIXES: if (std::cmp_greater(uArray[6] , VALUE))116 117 if (unsigned(uArray[7]) >= int(sArray[7]))118 return 0;119// CHECK-MESSAGES: :[[@LINE-2]]:9: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]120// CHECK-FIXES: if (std::cmp_greater_equal(uArray[7],sArray[7]))121 122 123 FuncParameters(uVar);124 TemplateFuncParameter(sVar);125 TemplateFuncParameters(uVar, sVar);126 127 return 0;128}129