r313747 - [Sema] CheckTautologicalComparisonWithZero(): always complain about enums
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 20 05:24:20 PDT 2017
On Wed, Sep 20, 2017 at 6:15 AM, Roman Lebedev via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> 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.
Why is it invalid for the comparand to contain a negative value when
the enum type is signed?
~Aaron
>
> 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)
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list