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