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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.