https://github.com/halbi2 created https://github.com/llvm/llvm-project/pull/128614
The cv-qualifiers are not relevant to the comparison result so one should not print them. >From 5137e7f1892e4b61d1e496372e82f63b944b8124 Mon Sep 17 00:00:00 2001 From: halbi2 <hehira...@gmail.com> Date: Mon, 24 Feb 2025 19:54:09 -0500 Subject: [PATCH] [clang] Improve -Wsign-compare diagnostic The cv-qualifiers are not relevant to the comparison result so one should not print them. --- clang/lib/Sema/SemaChecking.cpp | 3 ++- clang/test/SemaCXX/compare.cpp | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 74f425d32648f..5c664eebeb0c5 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -10593,7 +10593,8 @@ static void AnalyzeComparison(Sema &S, BinaryOperator *E) { S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(diag::warn_mixed_sign_comparison) - << LHS->getType() << RHS->getType() + << LHS->getType().getUnqualifiedType() + << RHS->getType().getUnqualifiedType() << LHS->getSourceRange() << RHS->getSourceRange()); } diff --git a/clang/test/SemaCXX/compare.cpp b/clang/test/SemaCXX/compare.cpp index cfddf2142f308..d678adc38efd1 100644 --- a/clang/test/SemaCXX/compare.cpp +++ b/clang/test/SemaCXX/compare.cpp @@ -233,10 +233,10 @@ void test4(short s) { // All negative shorts are cast towards the max unsigned range. Relation // comparisons are possible, but equality comparisons are tautological. const unsigned A = 32768; - void (s < A); // expected-warning{{comparison of integers of different signs: 'short' and 'const unsigned int'}} - void (s > A); // expected-warning{{comparison of integers of different signs: 'short' and 'const unsigned int'}} - void (s <= A); // expected-warning{{comparison of integers of different signs: 'short' and 'const unsigned int'}} - void (s >= A); // expected-warning{{comparison of integers of different signs: 'short' and 'const unsigned int'}} + void (s < A); // expected-warning{{comparison of integers of different signs: 'short' and 'unsigned int'}} + void (s > A); // expected-warning{{comparison of integers of different signs: 'short' and 'unsigned int'}} + void (s <= A); // expected-warning{{comparison of integers of different signs: 'short' and 'unsigned int'}} + void (s >= A); // expected-warning{{comparison of integers of different signs: 'short' and 'unsigned int'}} void (s == A); // expected-warning{{comparison of constant 32768 with expression of type 'short' is always false}} void (s != A); // expected-warning{{comparison of constant 32768 with expression of type 'short' is always true}} @@ -245,12 +245,12 @@ void test4(short s) { // unsigned. Likewise, a negative one short can also be converted to max // unsigned. const unsigned B = -1; - void (s < B); // expected-warning{{comparison of integers of different signs: 'short' and 'const unsigned int'}} + void (s < B); // expected-warning{{comparison of integers of different signs: 'short' and 'unsigned int'}} void (s > B); // expected-warning{{comparison 'short' > 4294967295 is always false}} void (s <= B); // expected-warning{{comparison 'short' <= 4294967295 is always true}} - void (s >= B); // expected-warning{{comparison of integers of different signs: 'short' and 'const unsigned int'}} - void (s == B); // expected-warning{{comparison of integers of different signs: 'short' and 'const unsigned int'}} - void (s != B); // expected-warning{{comparison of integers of different signs: 'short' and 'const unsigned int'}} + void (s >= B); // expected-warning{{comparison of integers of different signs: 'short' and 'unsigned int'}} + void (s == B); // expected-warning{{comparison of integers of different signs: 'short' and 'unsigned int'}} + void (s != B); // expected-warning{{comparison of integers of different signs: 'short' and 'unsigned int'}} } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits