r313747 - [Sema] CheckTautologicalComparisonWithZero(): always complain about enums
Roman Lebedev via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 20 03:15:27 PDT 2017
Author: lebedevri
Date: Wed Sep 20 03:15:27 2017
New Revision: 313747
URL: http://llvm.org/viewvc/llvm-project?rev=313747&view=rev
Log:
[Sema] CheckTautologicalComparisonWithZero(): always complain about enums
Hopefully fixes test-clang-msc-x64-on-i686-linux-RA build.
The underlying problem is that the enum is signed there.
Yet still, it is invalid for it to contain negative values,
so the comparison is always tautological in this case.
No differential, but related to https://reviews.llvm.org/D37629
Modified:
cfe/trunk/lib/Sema/SemaChecking.cpp
Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=313747&r1=313746&r2=313747&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Wed Sep 20 03:15:27 2017
@@ -8592,22 +8592,26 @@ bool CheckTautologicalComparisonWithZero
bool Match = true;
- if (Op == BO_LT && isNonBooleanUnsignedValue(LHS) && IsZero(S, RHS)) {
+ if (Op == BO_LT && IsZero(S, RHS) &&
+ (isNonBooleanUnsignedValue(LHS) || HasEnumType(LHS))) {
S.Diag(E->getOperatorLoc(),
HasEnumType(LHS) ? diag::warn_lunsigned_enum_always_true_comparison
: diag::warn_lunsigned_always_true_comparison)
<< "< 0" << false << LHS->getSourceRange() << RHS->getSourceRange();
- } else if (Op == BO_GE && isNonBooleanUnsignedValue(LHS) && IsZero(S, RHS)) {
+ } else if (Op == BO_GE && IsZero(S, RHS) &&
+ (isNonBooleanUnsignedValue(LHS) || HasEnumType(LHS))) {
S.Diag(E->getOperatorLoc(),
HasEnumType(LHS) ? diag::warn_lunsigned_enum_always_true_comparison
: diag::warn_lunsigned_always_true_comparison)
<< ">= 0" << true << LHS->getSourceRange() << RHS->getSourceRange();
- } else if (Op == BO_GT && isNonBooleanUnsignedValue(RHS) && IsZero(S, LHS)) {
+ } else if (Op == BO_GT && IsZero(S, LHS) &&
+ (isNonBooleanUnsignedValue(RHS) || HasEnumType(RHS))) {
S.Diag(E->getOperatorLoc(),
HasEnumType(RHS) ? diag::warn_runsigned_enum_always_true_comparison
: diag::warn_runsigned_always_true_comparison)
<< "0 >" << false << LHS->getSourceRange() << RHS->getSourceRange();
- } else if (Op == BO_LE && isNonBooleanUnsignedValue(RHS) && IsZero(S, LHS)) {
+ } else if (Op == BO_LE && IsZero(S, LHS) &&
+ (isNonBooleanUnsignedValue(RHS) || HasEnumType(RHS))) {
S.Diag(E->getOperatorLoc(),
HasEnumType(RHS) ? diag::warn_runsigned_enum_always_true_comparison
: diag::warn_runsigned_always_true_comparison)
More information about the cfe-commits
mailing list