Implicit type conversions in switch statements - Printable Version +- MISRA Discussion Forums (https://forum.misra.org.uk) +-- Forum: MISRA C (https://forum.misra.org.uk/forumdisplay.php?fid=4) +--- Forum: MISRA-C: 2004 rules (https://forum.misra.org.uk/forumdisplay.php?fid=17) +---- Forum: 6.15 Switch Statements (https://forum.misra.org.uk/forumdisplay.php?fid=45) +---- Thread: Implicit type conversions in switch statements (/showthread.php?tid=787) |
Implicit type conversions in switch statements - dcrocker - 02-11-2010 I've a question concerning the following example: Code: int8 x; I would expect any good static checker to report that x can never equal 255 here. But is 'case 255:' actually a MISRA 2004 rule violation? The C standard says that the switch expression x gets promoted to 'int' in this case, so the type of the case label 255 does match the type of the promoted switch expression. I can't find any MISRA rule that says that we should consider the underlying type (instead of the promoted type) of the switch variable when deciding whether a case label is allowed or not. If "case 255:" was the only case label on some code, then rule 14.1 (no unreachable code) would apply; but in this example, there is no unreachable code. Re: Implicit type conversions in switch statements - misra-c - 03-11-2010 The underlying type of the controlling expression of the switch statement is signed 8-bit. Conversion of 1L from underlying long int to signed 8-bit violates Rule 10.1. Conversion of 255 from underlying signed 16-bit to signed 8-bit also violates Rule 10.1. This conversion is mentioned in Section 6.10.2 under the subsection Assigning Conversions. See also the Exemplar Suite file mc2_1001.c. |