================ @@ -169,7 +169,84 @@ int struct_test(struct A a) { return a.x > 5 && a.y < 1; // no warning, different variables return a.x > 5 && a.x < 1; - // expected-warning@-1{{overlapping comparisons always evaluate to false}} + // expected-warning@-1{{non-overlapping comparisons always evaluate to false}} return a.y == 1 || a.y != 1; // expected-warning@-1{{overlapping comparisons always evaluate to true}} } + +void char_tests(char c) { + if (c > 'a' || c < 'z') {} + // expected-warning@-1{{overlapping comparisons always evaluate to true}} + if (c > 'z' && c < 'a') {} + // expected-warning@-1{{non-overlapping comparisons always evaluate to false}} + if (c == 'a' && c == 'z') {} + // expected-warning@-1{{non-overlapping comparisons always evaluate to false}} + if (c != 'a' || c != 'z') {} + // expected-warning@-1{{overlapping comparisons always evaluate to true}} +} + +void float_tests(float f) { + if (f > 1.0 || f < 2.0) {} + // expected-warning@-1{{overlapping comparisons always evaluate to true}} ---------------- Sirraide wrote:
Also, can you add some more tests involving `nan` and `±inf` (you can use `__builtin_nan()/__builtin_inf()` and friends for those). https://github.com/llvm/llvm-project/pull/133653 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits