Ineffective comparison of unsigned value is always false

The CWARN.NOEFFECT.UCMP.LT checker flags code outside of macros, in which there is a comparison of an unsigned value to zero that is always false.

Vulnerability and risk

If 'a' is an unsigned value, the comparisons a < 0 and 0 > a are always false. These comparisons have no effect, so it's probable that design intent isn't being accomplished.

Vulnerable code example

1  int foo(unsigned int a) {
2    if (a < 0)  
3      return 1;
4    else
5      return 2;
6  }

Klocwork flags line 2, in which the comparison 0 < a is always false.