MISRA Discussion Forums

Full Version: Conversions outside of the essential type categories
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

With respect to the essential type rules, do conversions to types that are outside the essential type categories count as violations of the rules? For example:
char buf[80];
char *p = buf;
uintptr_t p_plus_one;
void foo(void);
void foo(void) {
    // This next statement violates R11.4.  But does
    // it violate R10.8?  As a pointer type, p+1 does not
    // have a clear essential type category.
    p_plus_one = (uintptr_t)(p+1);
On the one hand, the spirit of the rule seems like it should prohibit such things. On the other hand, TC1 amends rule 10.1 to describe how a pointer type may not be used as an operand of a logical operator.

Thank you for your time.

Rules 10.2-10.8 only apply to expressions whose operands have arithmetic types. This will be clarified in a future release.
Therefore rule 10.8 does not apply to "(uintptr_t)(p+1)".

However p+1 violates rule 18.4 and (uintptr_t)(p+1) violates rule 11.4