Isn't there a rule to ensure that comparison is perform on same object type?
Check the table in MISRA C 2012 Appendix D.1: both operands are essentially unsigned.
The table in rule 10.1 poses no restrictions on operator < for essentially unsigned operands.
If both operands are supposed to be of the same essential type (not just the same essential type category): that is not clearly stated IMHO.
IMHO, currently the bug would be catched only if there is a narrowing assignment which is prohibited by rule 10.3 (see below).
Anyhow, an official clarification would be nice.
Code: Select all
unsigned char var1 = 0;
unsigned short var2 = 300;
const unsigned char cmp = var2;/*Expression assigned to a narrower or different essential type [MISRA 2012 Rule 10.3, required]*/
while (var1 < cmp)
(void)printf("program completed \n ");