On 24.03.2020 15:39, Matteo Bruni wrote:
On Tue, Mar 24, 2020 at 3:29 PM Jacek Caban jacek@codeweavers.com wrote:
On 24.03.2020 14:59, Henri Verbeet wrote:
On Tue, 24 Mar 2020 at 17:45, Matteo Bruni matteo.mystral@gmail.com wrote:
I assume replacing "op < 0" with an explicit "op < SCT_VSFLOAT" doesn't avoid the warning. Does replacing the if with an assert do the trick, by any chance?
It's perhaps a little subtle, but if you compare "op" against "ARRAY_SIZE(const_tbl)" (which is what you really care about here anyway, right?) instead of SCT_PSINT, you can drop the check against 0, regardless of whether the enum ends up being a signed or unsigned type.
Strictly speaking, if enum would be signed the check wouldn't catch some invalid values, but I don't think that's worrying about. If we want it fully strict, we could change argument type from enum to unsigned int.
Thanks,
Jacek
I think sizeof() (and thus ARRAY_SIZE()) always returns an unsigned integer, op is promoted to unsigned if necessary and the comparison is guaranteed to be unsigned.
Sure, but theoretically if underlying type of enum is signed char (actually, signed part is not important), then it will be truncated before being promoted.
Jacek