aaron.ballman added a comment. In http://reviews.llvm.org/D13643#266649, @mgrabovsky wrote:
> In http://reviews.llvm.org/D13643#265976, @aaron.ballman wrote: > > > Should there be an exception to this diagnostic for code involving Boolean > > values? e.g., > > > > void f(bool a, bool b, bool c) { > > > > if (a == b == c) > > ; > > > > } > > > > At the very least, it seems like this should also follow GCC's behavior and > > suggest parenthesis directly. > > > Interesting. This might be more complex than I had predicted. I'll try to dig > into GCC's code and see what they do exactly. I can't guarantee returning > sane, though. > > Some thoughts: Even if `a, b, c` are Booleans, what did the user mean by `a > == b == c`? Do they realise that the compiler interprets it as `(a == b) == > c`? What about 'type mismatches', i.e. if `a, b` are `int`s, while `b` is > `bool` – clearly the user must be aware of the interpretation above here. > What if `a, b, c` are all `int`s – C90 doesn't have Booleans, so it might be > intended as either. I would spend some time digging into how GCC handles those cases, and use that as a baseline that we can then improve upon. I like the fact that GCC basically says "use parens to clarify your intent", as that solves all of the cases regarding equality and inequality. I would imagine type == type == bool should behave the same as bool == bool == bool; it can be valid code that just needs parens to clarify intent. As for C90 behavior, I'm not too worried about what we do there. ================ Comment at: include/clang/Basic/DiagnosticSemaKinds.td:5865 @@ -5864,1 +5864,3 @@ +def warn_ternary_comparison : Warning<"ternary comparisons do not work " + "as expected">, ---------------- mgrabovsky wrote: > aaron.ballman wrote: > > This diagnostic somewhat implies that ?: does not work as expected. I > > prefer GCC's wording for this: > > > > "comparisons like 'X<=Y<=Z' do not have their mathematical meaning" > > > > However, I would love it if we could do one step better and use the same > > operators the user wrote, if reasonable. ;-) > > This diagnostic somewhat implies that ?: does not work as expected. > > ?: is a ternary operator but it's not a comparison. > > > I prefer GCC's wording for this > > I wasn't sure if we wanted to be copycats, but OK. > > > would love it if we could do one step better and use the same operators the > > user wrote > > Yes, that would be nice. > I wasn't sure if we wanted to be copycats, but OK. If we can improve on their wording, I am all for it. I just find their wording more clear than the proposed wording. http://reviews.llvm.org/D13643 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits