MISRAC2004-12.2_a
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
Expressions were found that depend on the order of evaluation. This check is identical to MISRAC++2008-5-0-1_a, MISRAC2012-Rule-1.3_i, MISRAC2012-Rule-13.2_a, SPC-order, CERT-EXP30-C_a.
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-1.3
(Required) There shall be no occurrence of undefined or critical unspecified behaviour
- 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
- MISRA C++ 2008 5-0-1
(Required) The value of an expression shall be the same under any order of evaluation that the standard permits.
Code examples
The following code example fails the check and will give a warning:
int main(void) {
int i = 0;
i = i * i++; //unspecified order of operations
return 0;
}
The following code example passes the check and will not give a warning about this issue:
int main(void) {
int i = 0;
int x = i;
i++;
x = x * i; //OK - statement is broken up
return 0;
}