Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: REM Cost Reform

...

Should x represent a hardware register or some other memory-mapped device that has side effects when accessed, the previous miscompiled code example may produce unexpected behavior.

Compliant Solution

Eide and Regehr tested a workaround by wrapping volatile accesses with function calls. They describe it with the intuition that "we can replace an action that compilers empirically get wrong by a different action—a function call—that compilers can get right" [Eide and Regehr]. For example, the workaround for the noncompliant code example would be

...

The workarounds proposed by Eide and Regehr fix many of the volatile-access bugs in the tested compilers. However, compilers are always changing, so critical sections of code should be compiled as if for deployment, and the compiled object code should be inspected for the correct behavior.

...

The volatile qualifier should be used with caution in mission-critical situations. Always make sure code that assumes certain behavior when using the volatile qualifier is inspected at the object code level for compiler bugs.

Rule

Severity

Likelihood

Detectable

Remediation Cost

Repairable

Priority

Level

DCL17-C

Medium

Probable

No

High

No

P4

L3

Automated Detection

Tool

Version

Checker

Description

LDRA tool suite
 
Include Page
LDRA_V
LDRA_V
134 SPartially implemented

Bibliography

[Eide and Regehr]"Volatiles Are Miscompiled, and What to Do about It"
[ISO/IEC 9899:2011]Subclause 6.7.3, "Type Qualifiers"

...


...

Image Modified Image Modified Image Modified