To my understanding for lines 9 to 11...
* "1u" is an unsigned integer constant that is compatible with e.g. an unsigned char or wider.
* "1Lu" is an unsigned integer constant that is compatible with e.g. an unsigned char or wider.
* "1LLU" is some unsinged long integer constant that is compatible with e.g. an unsigned char.
I would expect the typical math/logic operations on such a constant to result in an unsigned (long) integer as well.
For line 13 i have no understanding as that value is an unsigned integer that is only compatible with an unsigned integer or wider.
(As of now I am not absolutely sure if I still have some basic misunderstanding here. But some parts might still be a problem.)
sample compiler invocation:
C:\SW_TOOLS-trunk\compilers\c6000_7_6_0\bin\cl6x.exe file.c --check_misra=required,advisory,-1.1,-6.3 "file.c", line 9: warning: (MISRA-C:2004 10.5/R) If the bitwise operators ~ and << are applied to an operand of underlying type unsigned char or unsigned short, the result shall be immediately cast to the underlying type of the operand "file.c", line 10: warning: (MISRA-C:2004 10.5/R) If the bitwise operators ~ and << are applied to an operand of underlying type unsigned char or unsigned short, the result shall be immediately cast to the underlying type of the operand "file.c", line 11: warning: (MISRA-C:2004 10.5/R) If the bitwise operators ~ and << are applied to an operand of underlying type unsigned char or unsigned short, the result shall be immediately cast to the underlying type of the operand "file.c", line 12: warning: (MISRA-C:2004 10.5/R) If the bitwise operators ~ and << are applied to an operand of underlying type unsigned char or unsigned short, the result shall be immediately cast to the underlying type of the operand "file.c", line 13: warning: (MISRA-C:2004 10.1/R) The value of an expression of integer type shall not be implicitly converted to a different underlying type if the expression is complex
file.c:
extern void a(void); void a(void) { unsigned int s = 6u; unsigned int u; unsigned int v; u = 1u << s; u = 1Lu << s; u = 1LLu << s; u = 0x08000u << s; u = 0x10000u << s; #if 0 u = ((unsigned char)1u) << s; u = ((unsigned short)1u) << s; #endif u = ((unsigned int)1u) << s; v = 1u; u = v << s; (void)(u); }