[cfe-dev] Warning at always true condition

Jordan Rose 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[0] 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/

Jordan


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[0] != 'h' || p[0] != 'H')
>> {
>> cout << "Word does not start with h/H\n";
>> }
> 
> The condition is always true and none of compiler seems to warn them. 
> 
> 
> --Regards
> --Deleisha
> 
> 
> 
> 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
> 
> --Deleisha
> 
> 
> 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
>> --Dev
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> 
> 
> 
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev





More information about the cfe-dev mailing list