...
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Astrée |
| evaluation-order multiple-volatile-accesses | Partially checked | ||||||
Axivion Bauhaus Suite |
| CertC-EXP10 | Fully implemented | ||||||
Compass/ROSE | Could detect violations of this recommendation by searching for the following pattern:
| ||||||||
| EVALUATION_ORDER | Can detect the specific instance where a statement contains multiple side effects on the same value with an undefined evaluation order because the statement may behave differently with different compiler flags or different compilers or platforms | |||||||
LDRA tool suite |
| 35 D, 72 D, 1 Q, 134 S | Fully implemented | ||||||
Parasoft C/C++test |
| CERT_C-EXP10-a | The value of an expression shall be the same under any order of evaluation that the standard permits | ||||||
Polyspace Bug Finder |
| MISRA C:2012 Rule 13.2 | The value of an expression and its persistent side effects shall be the same under all permitted evaluation orders | ||||||
PRQA QA-C |
| 3226,3326,0400, 0401, 0402,0403 | Partially implemented | ||||||
PVS-Studio |
| V521, V681 | |||||||
RuleChecker |
| evaluation-order multiple-volatile-accesses | Partially checked |
A programmer could also violate the recommendation using dynamic memory passed to both functions, but that would be extremely difficult to detect using static analysis.
...