check_signed.c false negative
John Levon <[email protected]>
| Newsgroups | org.kernel.vger.smatch |
|---|---|
| Message-ID | <[email protected]> |
Given:
enum ib_qp_state {
IB_QPS_RESET,
IB_QPS_INIT,
IB_QPS_RTR,
IB_QPS_RTS,
IB_QPS_SQD,
IB_QPS_SQE,
IB_QPS_ERR
};
int p(enum ib_qp_state cur_state, enum ib_qp_state next_state)
{
#if 0
if (cur_state < 0 || cur_state > IB_QPS_ERR ||
next_state < 0 || next_state > IB_QPS_ERR) {
return (5);
}
#else
if (next_state < 0 || next_state > IB_QPS_ERR) {
return (5);
}
#endif
return (0);
}
current smatch is happy. But "#if 1" above instead, and:
jlevon@sent:~/src/smatch$ ./smatch a.c
./smatch: a.c:15 p() warn: unsigned 'cur_state' is never less than zero.
Why is "next_state" not reported equally?
thanks
john