Skip to main content

IAR Embedded Workbench for RISC-V 3.40

MISRAC2004-12.2_a

In this section:
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

mediumhigh.png
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;
}