...
Another GCC extension known as statement expression makes it possible for the block statement to appear where an expression is expected. The statement expression extension establishes a scope (note the curly braces) and any declarations in it are distinct from those in enclosing scopes.
Code Block | ||||
---|---|---|---|---|
| ||||
#define ABS(x) __extension__ ({ __typeof (x) __tmp = x; __tmp < 0 ? - __tmp : __tmp; }) |
...
Defining an unsafe macro leads to invocations of the macro with an argument that has side effects, causing those side effects to occur more than once. Unexpected or undefined program behavior can result.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
PRE12-C | Low | Probable | Low | P6 | L2 |
Automated Detection
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Astrée |
| macro-parameter-multiplied macro-parameter-unused | Partially checked | ||||||
Axivion Bauhaus Suite |
| CertC-PRE12 | |||||||
| CC2.PRE12 | Fully implemented | |||||||
Helix QAC |
| C3456 | |||||||
LDRA tool suite |
| 562 S, 572 S, 35 D, 1 Q | Partially implemented |
RuleChecker |
|
| macro-parameter-multiplied macro-parameter-unused | Partially checked |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
...
...