[cfe-dev] Warning at always true condition
jordan_rose at apple.com
Tue Jun 12 10:28:35 PDT 2012
The analyzer will catch this (under the "deadcode" checkers, enabled by default), although in your particular test case it's actually smart enough to /know/ that p is 'H' (because it can see the initialization).
Adding this to the compiler is certainly possible, at least not for the limited case of ($x != k1 || $x != k2). If you put another conditional in the middle ($x != k1 || $y || $x != k2) it's a bit harder to see immediately that this is always true. I can see how the original case would come up in real life with your example, though—in English you can say "*p is not 'h' or 'H'", but in C you have to say "*p is not 'h' AND *p is not 'H'".
If you decide to implement this yourself, watch out for when something in the condition has side effects—then it's /not/ guaranteed to be a tautology. If you were just asking, please file an "enhancement" bug at http://llvm.org/bugs/
On Jun 11, 2012, at 11:12 PM, Devchandra L Meetei wrote:
> Sorry but true.
> This is not what, I was looking.
>> char *p ="Hello World\n";
>> if(p != 'h' || p != 'H')
>> cout << "Word does not start with h/H\n";
> The condition is always true and none of compiler seems to warn them.
> On Tue, Jun 12, 2012 at 11:30 AM, Devchandra L Meetei <dlmeetei at gmail.com> wrote:
> Thanks Sean
> I will have a look at that.
> Thanks for the pointer
> On Tue, Jun 12, 2012 at 5:34 AM, Seth Cantrell <bames53 at gmail.com> wrote:
> There's a -Weverything which I think you can use to check to see if a bit of code triggers any warnings.
> On Jun 11, 2012, at 7:10 AM, Devchandra L Meetei wrote:
>> Hi All
>> Does clang support any switch to warn about a conditional eg in if(p* !='h' || p* !='H'), which is always true.
>> Thankss in reply for timely response
>> Warm Reagrds
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
More information about the cfe-dev