...
Violating any shall statement within a constraint clause in the C Standard requires an implementation to issue a diagnostic message, the C Standard, 5.1.1.3 [ISO/IEC 9899:2011] states:
A conforming implementation shall produce at least one diagnostic message (identified in an implementation-defined manner) if a preprocessing translation unit or translation unit contains a violation of any syntax rule or constraint, even if the behavior is also explicitly specified as undefined or implementation-defined. Diagnostic messages need not be produced in other circumstances.
The C Standard further explains in a footnote:
The intent is that an implementation should identify the nature of, and where possible localize, each violation. Of course, an implementation is free to produce any number of diagnostics as long as a valid program is still correctly translated. It may also successfully translate an invalid program.
...
The C Standard, 6.7.4, paragraph 3 [ISO/IEC 9899:2011], states:
An inline definition of a function with external linkage shall not contain a definition of a modifiable object with static or thread storage duration, and shall not contain a reference to an identifier with internal linkage.
...
Constraint violations are a broad category of error that can result in unexpected control flow and corrupted data.
Rule | Severity | Likelihood | Detectable |
|---|
Repairable | Priority | Level |
|---|---|---|
MSC40-C | Low | Unlikely |
No | No |
P1 | L3 |
Automated Detection
Tool | Version | Checker | Description |
|---|
| Astrée |
|
|
387 S, 404 S, 481 S, 580 S,
615 S, 646 S
0232, 0233, 0244, 0261, 0278, 0321, 0322, 0338, 0422, 0423, 0426, 0427, 0429–0432, 0435–0437, 0446–0454, 0456–0458, 0466–0469, 0476–0478, 0481–0487, 0493–0496, 0513–0515, 0536, 0537, 0540–0542, 0546, 0547, 0550, 0554–0565, 0580, 0588–0591, 0605, 0616, 0619–0622, 0627–0629, 0631, 0638, 0640–0646, 0649–0651, 0653, 0655–0657, 0659, 0664, 0665, 0671, 0673–0675, 0677, 0682–0685, 0690, 0698, 0699, 0708, 0709, 0736–0738, 0746, 0747, 0755–0758, 0766–0768, 0774, 0775, 0801–0804, 0811, 0812, 0821, 0834, 0835, 0844, 0845, 0851, 0852, 0856, 0866, 0873, 0877, 0940, 0941, 0943, 0944, 1023–1025, 1033, 1047, 1048, 3236–3238, 3244
| alignas-extended | Partially checked | |||||||
| Cppcheck Premium |
| premium-cert-msc40-c | |||||||
| Helix QAC |
| C0232, C0233, C0244, C0268, C0321, C0322, C0338, C0422, C0423, C0426, C0427, C0429, C0430, C0431, C0432, C0435, C0436, C0437, C0446, C0447, C0448, C0449, C0451, C0452, C0453, C0454, C0456, C0457, C0458, C0460, C0461, C0462, C0463, C0466, C0467, C0468, C0469, C0476, C0477, C0478, C0481, C0482, C0483, C0484, C0485, C0486, C0487, C0493, C0494, C0495, C0496, C0497, C0513, C0514, C0515, C0536, C0537, C0540, C0541, C0542, C0546, C0547, C0550, C0554, C0555, C0556, C0557, C0558, C0559, C0560, C0561, C0562, C0563, C0564, C0565, C0580, C0588, C0589, C0590, C0591, C0605, C0616, C0619, C0620, C0621, C0622, C0627, C0628, C0629, C0631, C0638, C0640, C0641, C0642, C0643, C0644, C0645, C0646, C0649, C0650, C0651, C0653, C0655, C0656, C0657, C0659, C0664, C0665, C0669, C0671, C0673, C0674, C0675, C0677, C0682, C0683, C0684, C0685, C0690, C0698, C0699, C0708, C0709, C0736, C0737, C0738, C0746, C0747, C0755, C0756, C0757, C0758, C0766, C0767, C0768, C0774, C0775, C0801, C0802, C0803, C0804, C0811, C0821, C0834, C0835, C0844, C0845, C0851, C0852, C0866, C0873, C0877, C0940, C0941, C0943, C0944, C1023, C1024, C1025, C1033, C1047, C1048, C1050, C1061, C1062, C3236, C3237, C3238, C3244 C++4122 | |||||||
| Klocwork |
| MISRA.FUNC.STATIC.REDECL | |||||||
| LDRA tool suite |
| 21 S, 145 S, 323 S, 345 S, 387 S, 404 S, 481 S, 580 S, 612 S, 615 S, 646 S | |||||||
| Parasoft C/C++test |
| CERT_C-MSC40-a | An inline definition of a function with external linkage shall not contain definitions and uses of static objects | ||||||
| Polyspace Bug Finder |
| CERT C: Rule MSC40-C | Checks for inline constraint not respected (rule partially covered) | ||||||
| RuleChecker |
| alignas-extended | Partially checked |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Bibliography
| [ISO/IEC 9899:2011] | 4, "Conformance" |
...
...