Member predicate UpperBoundCheckGuard::isBoundFor
Holds if this upper bound check should stop flow for a flow state with bit
size bitSize and architecture bit size architectureBitSize.
A flow state has bit size bitSize if that is the smallest valid bit size
b such that the maximum value that could get to that point is less than
or equal to 2^(b) - 1. So the flow should be stopped if there is a valid
bit size b which is less than bitSize such that the maximum value that
could get to that point is than or equal to 2^(b) - 1. In this case,
the upper bound check is a barrier guard, because the flow should have bit
size equal to the smallest such b instead of bitSize.
The argument architectureBitSize is only used if the constant operand is
math.MaxInt or math.MaxUint.
Note that we have to use floats here because integers in CodeQL are represented by 32-bit signed integers, which cannot represent some of the integer values which we will encounter.
predicate isBoundFor(int bitSize, int architectureBitSize)