@@ -121,3 +121,81 @@ int AllComparisons() {
121
121
122
122
return 0 ;
123
123
}
124
+
125
+ namespace PR127471 {
126
+ int getSignedValue ();
127
+ unsigned int getUnsignedValue ();
128
+
129
+ void callExprTest () {
130
+
131
+ if (getSignedValue () < getUnsignedValue ())
132
+ return ;
133
+ // CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
134
+ // CHECK-FIXES: if (std::cmp_less(getSignedValue() , getUnsignedValue()))
135
+
136
+ int sVar = 0 ;
137
+ if (getUnsignedValue () > sVar )
138
+ return ;
139
+ // CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
140
+ // CHECK-FIXES: if (std::cmp_greater(getUnsignedValue() , sVar))
141
+
142
+ unsigned int uVar = 0 ;
143
+ if (getSignedValue () > uVar)
144
+ return ;
145
+ // CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
146
+ // CHECK-FIXES: if (std::cmp_greater(getSignedValue() , uVar))
147
+
148
+ }
149
+
150
+ // Add a class with member functions for testing member function calls
151
+ class TestClass {
152
+ public:
153
+ int getSignedValue () { return -5 ; }
154
+ unsigned int getUnsignedValue () { return 5 ; }
155
+ };
156
+
157
+ void memberFunctionTests () {
158
+ TestClass obj;
159
+
160
+ if (obj.getSignedValue () < obj.getUnsignedValue ())
161
+ return ;
162
+ // CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
163
+ // CHECK-FIXES: if (std::cmp_less(obj.getSignedValue() , obj.getUnsignedValue()))
164
+ }
165
+
166
+ void castFunctionTests () {
167
+ // C-style casts with function calls
168
+ if ((int )getUnsignedValue () < (unsigned int )getSignedValue ())
169
+ return ;
170
+ // CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
171
+ // CHECK-FIXES: if (std::cmp_less(getUnsignedValue(),getSignedValue()))
172
+
173
+
174
+ // Static casts with function calls
175
+ if (static_cast <int >(getUnsignedValue ()) < static_cast <unsigned int >(getSignedValue ()))
176
+ return ;
177
+ // CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
178
+ // CHECK-FIXES: if (std::cmp_less(getUnsignedValue(),getSignedValue()))
179
+ }
180
+
181
+ // Define tests
182
+ #define SIGNED_FUNC getSignedValue ()
183
+ #define UNSIGNED_FUNC getUnsignedValue ()
184
+
185
+ void defineTests() {
186
+ if (SIGNED_FUNC < UNSIGNED_FUNC)
187
+ return ;
188
+ // CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
189
+ // CHECK-FIXES: if (std::cmp_less(SIGNED_FUNC , UNSIGNED_FUNC))
190
+ }
191
+
192
+ // Template tests (should not warn)
193
+ template <typename T1>
194
+ void templateFunctionTest (T1 value) {
195
+ if (value () < getUnsignedValue ())
196
+ return ;
197
+
198
+ if (value () < (getSignedValue () || getUnsignedValue ()))
199
+ return ;
200
+ }
201
+ } // namespace PR127471
0 commit comments