Author: lebedevri Date: Fri Sep 8 06:56:45 2017 New Revision: 312792 URL: http://llvm.org/viewvc/llvm-project?rev=312792&view=rev Log: [Sema] Put tautological comparison of unsigned and zero into it's own flag
Summary: As requested by Sam McCall. ``` $ /build/llvm-build-Clang-release/./bin/clang -c /build/clang/test/Sema/outof-range-constant-compare.c /build/clang/test/Sema/outof-range-constant-compare.c:40:11: warning: comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare] if (a < 0x0000000000000000UL) // expected-warning {{comparison of unsigned expression < 0 is always false}} ~ ^ ~~~~~~~~~~~~~~~~~~~~ ``` Reviewers: sammccall, bkramer, djasper, rsmith, rjmccall, aaron.ballman Reviewed By: sammccall, aaron.ballman Subscribers: aaron.ballman, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D37620 Added: cfe/trunk/test/Sema/tautological-unsigned-zero-compare.c Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=312792&r1=312791&r2=312792&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Fri Sep 8 06:56:45 2017 @@ -427,12 +427,14 @@ def StringCompare : DiagGroup<"string-co def StringPlusInt : DiagGroup<"string-plus-int">; def StringPlusChar : DiagGroup<"string-plus-char">; def StrncatSize : DiagGroup<"strncat-size">; +def TautologicalUnsignedZeroCompare : DiagGroup<"tautological-unsigned-zero-compare">; def TautologicalOutOfRangeCompare : DiagGroup<"tautological-constant-out-of-range-compare">; def TautologicalPointerCompare : DiagGroup<"tautological-pointer-compare">; def TautologicalOverlapCompare : DiagGroup<"tautological-overlap-compare">; def TautologicalUndefinedCompare : DiagGroup<"tautological-undefined-compare">; def TautologicalCompare : DiagGroup<"tautological-compare", - [TautologicalOutOfRangeCompare, + [TautologicalUnsignedZeroCompare, + TautologicalOutOfRangeCompare, TautologicalPointerCompare, TautologicalOverlapCompare, TautologicalUndefinedCompare]>; Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=312792&r1=312791&r2=312792&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Sep 8 06:56:45 2017 @@ -5898,14 +5898,14 @@ def warn_mixed_sign_comparison : Warning InGroup<SignCompare>, DefaultIgnore; def warn_lunsigned_always_true_comparison : Warning< "comparison of unsigned%select{| enum}2 expression %0 is always %1">, - InGroup<TautologicalCompare>; + InGroup<TautologicalUnsignedZeroCompare>; def warn_out_of_range_compare : Warning< "comparison of %select{constant %0|true|false}1 with " "%select{expression of type %2|boolean expression}3 is always " "%select{false|true}4">, InGroup<TautologicalOutOfRangeCompare>; def warn_runsigned_always_true_comparison : Warning< "comparison of %0 unsigned%select{| enum}2 expression is always %1">, - InGroup<TautologicalCompare>; + InGroup<TautologicalUnsignedZeroCompare>; def warn_comparison_of_mixed_enum_types : Warning< "comparison of two values with different enumeration types" "%diff{ ($ and $)|}0,1">, Added: cfe/trunk/test/Sema/tautological-unsigned-zero-compare.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/tautological-unsigned-zero-compare.c?rev=312792&view=auto ============================================================================== --- cfe/trunk/test/Sema/tautological-unsigned-zero-compare.c (added) +++ cfe/trunk/test/Sema/tautological-unsigned-zero-compare.c Fri Sep 8 06:56:45 2017 @@ -0,0 +1,47 @@ +// RUN: %clang_cc1 -fsyntax-only -DTEST -verify %s +// RUN: %clang_cc1 -fsyntax-only -Wno-tautological-unsigned-zero-compare -verify %s + +unsigned value(void); + +int main() { + unsigned un = value(); + +#ifdef TEST + if (un < 0) // expected-warning {{comparison of unsigned expression < 0 is always false}} + return 0; + if (un >= 0) // expected-warning {{comparison of unsigned expression >= 0 is always true}} + return 0; + if (0 <= un) // expected-warning {{comparison of 0 <= unsigned expression is always true}} + return 0; + if (0 > un) // expected-warning {{comparison of 0 > unsigned expression is always false}} + return 0; + if (un < 0U) // expected-warning {{comparison of unsigned expression < 0 is always false}} + return 0; + if (un >= 0U) // expected-warning {{comparison of unsigned expression >= 0 is always true}} + return 0; + if (0U <= un) // expected-warning {{comparison of 0 <= unsigned expression is always true}} + return 0; + if (0U > un) // expected-warning {{comparison of 0 > unsigned expression is always false}} + return 0; +#else +// expected-no-diagnostics + if (un < 0) + return 0; + if (un >= 0) + return 0; + if (0 <= un) + return 0; + if (0 > un) + return 0; + if (un < 0U) + return 0; + if (un >= 0U) + return 0; + if (0U <= un) + return 0; + if (0U > un) + return 0; +#endif + + return 1; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits