MISRA Discussion Forums

Full Version: Rule 10.6 An expression shall not be assigned to a wider type
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
The full rule title is:
Quote:The value of a composite expression shall not be assigned to an object with a wider essential type

I am having a lively debate with my scanner vendor about the quality of their scans. The following example code is generating the commented violation:
[code]
static inline uint32_t bit32 (uint32_t pos)
{
static const uint32_t mask = 31U;
static const uint32_t one = 1U;

// Event misra_c_2012_rule_10_6_violation: Assigning composite expression "1U
Appendix D.7 gives the essential type of an Shift Expression. It says:
Quote: Shift( > )
1. If the left hand operand is essentially unsigned then:
1.1 If both operands are integer constant expressions then the essential type of the result is the UTLR of the result;
1.2 Else the essential type of the result is the essential type of the left hand operand
In this case 1.2 applies and essential type is that of the left hand operand. The essential type of the left hand operand is uint32_t. There is therefore no assignment to a wider essential type and no violation of rule 10.6.

There would have been a violation of rule 10.6 if the code had been written as
[code] 1U