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

source code of clang-tools-extra/test/clang-tidy/checkers/modernize/use-integer-sign-comparison-qt.cpp