On Thu, 4 Nov 2021 at 22:34, Taylor Simpson <tsimp...@quicinc.com> wrote: > > Coverity is getting confused here. The index can never actually overflow. > Does Coverity have a pragma or something to tell it it's OK? > > The loop nest in question is (the index must be < 128) > for (int offset = 1; offset < 128; offset <<= 1) { > for (int k = 0; k < 128; k++) { > if (!(k & offset)) { > swap(vector1.ub[k], vector0.ub[k + offset]); > } > } > } > Basically, it's looking for elements to swap, and the > "if (!(k & offset))" prevents "k + offset" from overflowing.
Yes, I agree this is a false positive. I've marked it as an FP in the Coverity web UI. I suspect that changing "k + offset" to "k | offset" would probably stop Coverity complaining, but we should only do that if you think it's more readable that way. (As I read the code we are doing bit operations here rather than addition, so it seems slightly better to be using the OR; but there's not a lot in it.) thanks -- PMM