@@ -121,3 +121,81 @@ int AllComparisons() {
121121
122122 return 0 ;
123123}
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