Rule 13.6 - VLA, 'volatile' and Rule Exception

Moderators: misra-c, david ward

Post Reply
Posts: 7
Joined: Thu May 05, 2016 1:32 pm
Company: Programming Researrch

Rule 13.6 - VLA, 'volatile' and Rule Exception

Post by RichardC » Tue Feb 28, 2017 12:54 pm

A qualifier in the declaration of an array applies to the element type, C11 6.7.3/9:
If the specification of an array type includes any type qualifiers, the element type is so-
qualified, not the array type.

Code: Select all

    uint32_t f1 (int32_t x) {

      volatile int32_t a1[x];
               int32_t a2[x];

      return sizeof (a1) + sizeof (a2);
The Exception to this rule includes:
... is an lvalue with a volatile qualified type that is not a variable-length array...
Given that the qualifier applies to the element type and not the array type, "not a variable-length array" is always true for an lvalue with volatile type. Is it the intention for 'sizeof(a1)' to be non compliant and for 'sizeof(a2)' to be compliant?

The Exception could be seen to add to the set of non-compliant cases even though nothing is written explicitly in the Amplification or Rationale.



Posts: 566
Joined: Thu Jan 05, 2006 1:11 pm

Re: Rule 13.6 - VLA, 'volatile' and Rule Exception

Post by misra-c » Wed Jun 14, 2017 9:37 am

The MISRA-C working group agrees that the wording of the exception could be improved. The aim of the exception was to permit expressions with a volatile type, but not if the expression also contains a VLA declaration.

The exception should be interpreted as follows. sizeof(V) is permitted where V is an expression which:
1. Yields an lvalue with a volatile qualified type; and
2. Does not include a declaration of a variable-length array.

In conclusion, both a1 and a2 are compliant with this rule as the type being accessed is an "array type" not a volatile type.
Posted by and on behalf of
the MISRA C Working Group

Post Reply

Return to “8.13 Side effects”