...
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 motivation behind this constraint lies in the semantics of inline definitions. Paragraph 7 of subclause 6.7.4 reads, in part:
An inline definition provides an alternative to an external definition, which a translator may use to implement any call to the function in the same translation unit. It is unspecified whether a call to the function uses the inline definition or the external definition.
...
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" |
...
...