MISRAC++2008-5-0-1_c
Synopsis
(Required) The value of an expression shall be the same under any order of evaluation that the standard permits.
Enabled by default
Yes
Severity/Certainty
Medium/High

Full description
There are more than one modification access with volatile-qualified type within a single sequence point. This check is identical to SPC-volatile-writes, MISRAC2004-12.2_c, MISRAC2012-Rule-13.2_c.
Coding standards
- CERT EXP10-C
Do not depend on the order of evaluation of subexpressions or the order in which side effects take place
- CERT EXP30-C
Do not depend on order of evaluation between sequence points
- CWE 696
Incorrect Behavior Order
- MISRA C:2004 12.2
(Required) The value of an expression shall be the same under any order of evaluation that the standard permits.
- MISRA C:2012 Rule-13.2
(Required) The value of an expression and its persistent side effects shall be the same under all permitted evaluation orders
Code examples
The following code example fails the check and will give a warning:
void example(void) {
int x;
volatile int v, w;
v = w = x;
}
The following code example passes the check and will not give a warning about this issue:
#include <stdbool.h>
void InitializeArray(int *);
const int *example(void)
{
static volatile bool s_initialized = false;
static int s_array[256];
if (!s_initialized)
{
InitializeArray(s_array);
s_initialized = true;
}
return s_array;
}