Annex to MISRA 2012 Rule 1.3
This annex gives details about MISRA 2012 Rule 1.3.
This table identifies the undefined and critical unspecified behaviors that are notified by Rule 1.3.
In the columns,
- C90 Id is the number of the undefined behavior in 'Annex G' of 'The C90 Standard' where the behavior is mentioned in the body of 'The Standard' but not listed in 'Annex G', a * character is shown.
-
C99 Id is the number of the undefined behavior in 'Annex J' of 'The C99 Standard'
- Decidable: Yes or No, whether detecting instances of the behavior is, in general, decidable or not
- Guidelines lists the MISRA C Guidelines which, if complied with, avoid the undefined behavior
- Entension lists the MISRA C extended rules
- Notes provides additional notes on the behavior including information on rules that might help avoid the behavior, even if it cannot be totally avoided
If a particular undefined behavior has no entry in the Guidelines
column, then an instance of the behavior in a program is a violation of Rule
1.3.
Note: it is assumed that any code that is written in another language and linked
to the program does not directly or indirectly produce undefined behavior. For
example, assembly language modules might define overlapping objects which, if
accessed from C, can lead to undefined behavior even though this might not be
apparent from the C source code.
Critical unspecified behavior (H2):
Id | Decidable | Guideline | Extension | Notes | |
---|---|---|---|---|---|
C90 | C99 | ||||
1 | 1 | No | Rule E9.1, rule E9.2 | ||
2 | No | ||||
2 | 3 | No | Rule 21.16 | ||
3 | 4 | No | Rule 21.16 | ||
4 | 5 | No | Rule 21.16 | ||
5 | 6 | No | Rule 21.16 | Rule E4.2 | |
7 | Yes | Rule 5.1 | |||
6 | Yes | ||||
7 | Yes | ||||
9 | Yes | Rule E19.1 | |||
10 | Yes | Rule 19.1 | Rule E19.1 | ||
11 | Yes | ||||
12 | Yes | ||||
13 | Yes | Rule E10.1, rule E12.4 | Compliance with Rule 10.1 avoids generation of negative zeros when operating on expressions that have a signed type before promotion. | ||
14 | Yes | Rule 7.4 | |||
7,8 | 15 | Yes | Rule 13.2 | Rule E13.1, Rule 12.3 | |
9 | 16 | Yes | Rule 13.2 | ||
17 | Yes | Rule 13.1 | |||
7 | 18 | Yes | Rule 13.2 | Rule E12.3 | |
10 | 19 | No | |||
20 | Yes | Rule 8.10 | |||
21 | Yes | Rule 13.6, Rule 18.8 | |||
7 | 22 | Yes | Rule 13.1 | ||
11 | 23 | No | |||
* | 24 | Yes | Rule E20.6 | ||
12 | 25 | Yes | Rule 20.10, Rule 20.11 | Rule E20.2 | |
13 | 26 | No | Rule E21.1 | ||
27 | Yes | Rule 21.12 | |||
28 | Yes | Rule 21.12 | |||
29 | No | ||||
30 | Yes | Dir 4.11 | |||
31 | Yes | Dir 4.11 | |||
14 | 32 | No | Rule 21.4 | Rule E21.3 | |
15 | 33 | No | Rule 17.1 | ||
34 | Yes | Rule 21.6 | |||
16 | 35 | Yes | Rule 21.6 | ||
17 | 36 | Yes | Rule 21.6 | ||
18 | 37 | Yes | Rule 21.6 | ||
38 | No | ||||
19 | 39 | No | Rule 18.1, Rule 18.2, Rule 18.3, Rule 21.3 | Compliance with either Rule 21.3 or all of Rule 18.1, Rule 18.2 and Rule 18.3 will avoid this unspecified behavior | |
40 | Yes | Rule 21.3 | |||
20 | 41 | Yes | Rule 21.9 | ||
21 | 42 | Yes | Rule 21.9 | ||
22 | 43 | Yes | Rule 21.10 | ||
22 | 43 | Yes | Rule 21.10 | ||
44 | Yes | Rule 21.10 | |||
45 | Yes | ||||
46 | Yes | ||||
47 | Yes | ||||
48 | Yes | Dir 4.11 | |||
49 | Yes | Dir 4.11 | |||
50 | Yes | Dir 4.11 | |||
Undefined behavior (H1):
Id | Decidable | Guideline | Extension | Notes | ||
---|---|---|---|---|---|---|
C90 | C99 | |||||
1 | N/A | This behavior is listed in C99 but each such instance is also given its own entry in Annex J. The entry for this behavior is therefore redundant. | ||||
1 | 2 | Yes | ||||
3 | Yes | |||||
4 | Yes | |||||
2 | Yes | Rule E4.1, Rule E4.2 | ||||
5 | Yes | Rule E4.1, Rule E4.2 | ||||
3 | Yes | Rule 20.10 | ||||
6 | Yes | |||||
5 | Yes | Rule 5.2 | ||||
6 | Yes | Rule 17.3 | ||||
8 | 7 | Yes | ||||
8 | No | Dir 4.12, Rule 18.6, Rule 21.3 | ||||
9 | No | Dir 4.12, Rule 18.6, Rule 21.3 | ||||
9 | No | Dir 4.12, Rule 18.6, Rule 21.3 | ||||
41 | No | Rule 9.1 | Rule E9.1 | |||
10 | No | Rule E9.1 | Compliance with Rule 9.1 avoids a common cause of this undefined behavior but it is not sufficient to avoid all situations in which an indeterminate value might arise. | |||
11 | No | The following rules are used to avoid this behavior: Rule 9.1, Rule 11.2, Rule 11.3, Rule 11.4, Rule 11.5 and Rule 19.1. However, if a trap representation is copied into an object that does not have character type, for example using 'memmove', 'memcpy' or via a pointer to a character type as permitted by the exception of Rule 11.3, it is not possible to avoid this behavior. | ||||
12 | No | Rule 11.2, Rule 11.3, Rule 11.4, Rule 11.5 | ||||
13 | No | The following rules are used to avoid this behavior: Rule 9.1, Rule 10.1, Rule 11.2, Rule 11.3, Rule 11.4, Rule 11.5, and Rule 19.1. However, if the Exception of Rule 11.3 is used then it is not possible to prevent generation of a negative zero. | ||||
10 | 14 | Yes | Rule 5.6, Rule 5.7, Rule 8.3 | Rule E8.9 | ||
15 | No | Dir 4.1, Rule 10.3 | ||||
16 | No | Dir 4.1, Rule 10.3 | ||||
17 | No | Rule 9.1, Rule 11.2, Rule 11.3, Rule 11.4, Rule 11.5, Rule 19.1 | ||||
16 | 18 | Yes | ||||
19 | Yes | |||||
17 | 20 | Yes | ||||
* | 25 | Yes | ||||
26 | Yes | |||||
27 | Yes | |||||
7 | 28 | Yes | Rule 5.1, Rule 5.2, Rule 5.3, Rule 5.4, Rule 5.5 | |||
29 | Yes | Rule 21.2 | ||||
11 | Yes | Rule E4.1, Rule E4.2 | ||||
12 | 30 | No | Rule 7.4, Rule 11.4, Rule 11.8 | |||
13 | Yes | |||||
14 | Yes | Rule 20.2 | ||||
31 | Yes | Rule 20.2 | ||||
18 | 32 | No | Rule 13.2, Rule 13.3, Rule 13.4 | |||
19 | 33 | No | Dir 4.1 | |||
20 | No | Rule 11.3, Rule 11.4, Rule 11.5 | ||||
34 | No | Rule 11.3, Rule 11.4, Rule 11.5 | ||||
35 | Yes | |||||
21 | Yes | |||||
22 | 36 | no | Rule 8.2, Rule 17.3 | Rule E17.1 | Rule 17.3 is only applicable to, and only required for C90 | |
25 | No | Rule 8.4, Rule 5.5, Rule 11.1, Rule 21.2, Rule 17.3 | Rule E8.10 | |||
37 | No | Rule 8.4, Rule 5.5, Rule 11.1, Rule 21.2 | ||||
23 | No | Rule 8.2, Rule 17.3 | Rule E8.10 | |||
38 | No | Rule 8.2 | ||||
24 | No | Rule 5.6, Rule 5.7, Rule 8.3, Rule 8.4, Rule 8.5, Rule 11.1, Rule 21.2 | ||||
39 | No | Rule 5.6, Rule 5.7, Rule 8.2, Rule 8.3, Rule 8.4, Rule 8.5, Rule 11.1, Rule 21.2 | ||||
26 | 40 | No | Dir 4.1 | |||
28 | Yes | Rule 11.1 | ||||
29 | 41 | Yes | Rule 11.1, Rule 11.2, Rule 11.6, Rule 11.7 | |||
42 | No | Dir 4.1 | ||||
30 | 43 | No | Rule 18.1 | |||
* | 44 | No | Rule 18.1 | |||
31 | 45 | No | Rule 18.2 | |||
46 | No | Rule 18.1 | ||||
* | 47 | No | ||||
32 | 48 | No | ||||
32 | 48 | No | Rule 12.2 | |||
49 | No | Rule E10.1 | Compliance with Rule 10.1 avoids this undefined behavior except when the expression is left-shifted | |||
33 | 50 | No | Rule 18.3 | |||
34 | 51 | No | Rule 19.1 | |||
* | 52 | Yes | ||||
* | 54 | Yes | ||||
* | 55 | yes | ||||
35 | 56 | Yes | Rule E19.1 | |||
36 | 57 | Yes | Rule E8.8 | |||
37 | 58 | Yes | ||||
38 | Yes | Rule 6.1 | ||||
59 | No | Rule 18.7 | ||||
60 | Yes | |||||
39 | 61 | No | Rule 11.4, Rule 11.8, Rule 19.2 | |||
40 | 62 | No | Rule 11.4, Rule 11.8, Rule 19.2 | |||
* | 63 | Yes | ||||
* | 64 | Yes | ||||
65 | No | Rule 8.14 | ||||
66 | No | Rule 8.14 | ||||
67 | Yes | Rule 8.10 | ||||
* | 68 | Yes | ||||
69 | No | Rule 18.8 | ||||
70 | No | Rule 18.8 | ||||
71 | No | Rule 17.6 | ||||
72 | Yes | |||||
* | 73 | Yes | Rule 8.2, Rule 11.1 | |||
* | 74 | No | ||||
* | 75 | Yes | ||||
42 | Yes | Rule 9.2 | ||||
76 | Yes | Rule 9.2 | ||||
77 | Yes | Rule 9.2 | ||||
44 | 78 | Yes | Rule 8.6 | Rule E8.9, Rule E8.10 | ||
79 | Yes | Rule 8.2 | ||||
* | 80 | Yes | ||||
45 | 81 | Yes | Rule 17.1 | |||
43 | 82 | Yes | Rule 17.4 | |||
46 | 83 | Yes | ||||
47 | 84 | Yes | ||||
48 | 85 | Yes | Rule 20.3 | |||
86 | Yes | |||||
49 | Yes | |||||
50 | 87 | Yes | Rule 20.6 | |||
51 | 88 | Yes | Rule 20.10 | |||
52 | 89 | Yes | Rule 20.10 | |||
53 | 90 | Yes | ||||
91 | Yes | |||||
92 | Yes | |||||
54 | 93 | Yes | Rule 21.1 | |||
55 | 94 | No | Compliance with Rule 19.1 avoids a common cause of this undefined behavior but does not prevent copying part of an object to another part of the same object, such as an array. | |||
* | 95 | Yes | ||||
56 | Yes | Rule 17.3, Rule 20.1, Rule 20.4, Rule 21.2 | ||||
96 | Yes | Rule 20.1 | ||||
97 | Yes | Rule 20.1, Rule 21.2 | ||||
98 | Yes | Rule 20.4 | ||||
57 | Yes | Rule 21.1, Rule 21.2 | ||||
99 | Yes | Rule 21.2 | ||||
100 | Yes | Rule 21.1, Rule 21.2 | ||||
101 | Yes | Rule 21.1 | ||||
60 | 102 | No | Dir 4.11 | |||
* | 103 | No | Dir 4.11 | |||
61 | Yes | Rule 17.3, Rule 21.2 | ||||
62 | 104 | Yes | Dir 4.11 | Compliance with Rule 21.1 prevents non-definition of the macro but no rule prevents the macro expansion removal, ex by means of (assert)(E) | ||
105 | Yes | |||||
106 | Yes | |||||
63 | 107 | No | Dir 4.11 | |||
58 | Yes | Rule 21.1 | Rule E21.1 | |||
108 | Yes | Rule E21.1 | Compliance with Rule 21.1 prevents non-definition of the macro but no rule prevents the macro expansion from being removed, ex. by means of 'errno' if it is implemented as a function-like macro. Compliance with Rule 21.2 prevents definition of the identifier 'errno'. | |||
108 | No | Rule 21.12 | ||||
110 | No | Rule 21.12 | ||||
111 | No | Dir 4.11 | ||||
112 | No | Rule 21.7 | ||||
90 | No | |||||
94 | No | |||||
113 | No | |||||
* | 114 | No | ||||
* | 115 | No | ||||
116 | Yes | Rule 21.1, Rule 21.2 | ||||
117 | Yes | |||||
64 | Yes | Rule 21.1, Rule 21.2, Rule 21.4 | Rule E21.3 | |||
118 | Yes | Rule 21.1, Rule 21.2, Rule 21.4 | Rule E21.3 | |||
65 | 119 | No | Rule 21.4 | Rule E21.3 | ||
* | 120 | No | Rule 21.4 | Rule E21.3 | ||
66 | 121 | No | Rule 21.4 | Rule E21.3 | ||
67 | No | Rule 21.4, Rule 21.5 | Rule E21.3 | Compliance with either rule is sufficient to avoid the undefined behavior. | ||
* | 122 | No | Rule 21.5 | |||
* | 123 | No | Rule 21.5 | |||
124 | No | Rule 21.5 | ||||
68 | No | Rule 21.5 | ||||
125 | No | Rule 21.5 | ||||
Rule 21.5 | ||||||
Rule 21.5 | ||||||
69 | 126 | No | Rule 21.5 | |||
* | 127 | No | Rule 21.5 | |||
* | 128 | No | Compliance with Rule 17.1 avoids instances of this undefined behavior that arises through improper use of the features of <stdarg.h>. | |||
70 | 129 | No | Rule 17.1 | |||
71 | Yes | Rule 17.1, Rule 21.1, Rule 21.2 | ||||
130 | Yes | Rule 17.1, Rule 21.1, Rule 21.2 | ||||
75 | No | Rule 17.1 | ||||
76 | No | Rule 17.1 | ||||
131 | No | Rule 17.1 | ||||
132 | Yes | Rule 17.1 | ||||
73 | No | Rule 17.1 | ||||
74 | No | Rule 17.1 | ||||
133 | No | Rule 17.1 | ||||
134 | No | Rule 17.1 | ||||
72 | 135 | Yes | Rule 17.1 | |||
59 | 136 | Yes | Rule E21.2 | |||
137 | Yes | |||||
138 | No | Rule 21.6 | ||||
139 | No | Rule 21.6 | ||||
* | 140 | No | Rule 21.6 | If Rule 21.6 is deviated then Rule 22.6 provides protection against this undefined behavior. Rule 21.6 is preferred as it is 'decidable'. | ||
77 | 141 | No | Rule 21.6 | |||
142 | No | Rule 21.6 | ||||
78 | 143 | No | Rule 21.6 | |||
* | 144 | No | Rule 21.6 | |||
79 | No | Rule 21.6 | ||||
85 | No | Rule 21.6 | ||||
145 | No | Rule 21.6 | ||||
146 | No | Rule 21.6, Rule 21.10 | ||||
* | 147 | No | Rule 21.6 | |||
* | 148 | No | Rule 21.6 | |||
83 | No | Rule 21.6 | ||||
84 | No | Rule 21.6 | ||||
149 | No | Rule 21.6 | ||||
82 | No | Rule 21.6 | ||||
87 | No | Rule 21.6 | ||||
150 | No | Rule 21.6 | ||||
* | 151 | No | Rule 21.6 | |||
152 | No | Rule 21.6 | ||||
81 | 153 | No | Rule 21.6 | |||
97 | No | Rule 21.10 | ||||
80 | 154 | No | Rule 21.6, Rule 21.10 | |||
86 | 155 | No | Rule 21.6 | |||
89 | 156 | No | Rule 21.6 | |||
* | 157 | No | Rule 21.6 | |||
158 | No | Rule 21.6 | ||||
88 | 159 | No | Rule 21.6 | |||
* | 160 | No | Rule 21.6 | |||
* | 161 | No | Rule 21.6 | |||
* | 162 | No | Rule 21.6 | |||
* | 163 | No | Rule 21.6 | |||
* | 164 | No | Rule 21.6 | |||
* | 165 | No | Rule 21.6 | |||
* | 166 | No | Rule 21.6 | |||
* | 167 | No | Rule 21.3 | |||
91 | 168 | No | Rule 21.3 | |||
92 | 169 | No | Rule 21.3, Rule 22.2 | |||
* | 170 | No | Rule 21.3 | |||
* | 171 | No | Rule 21.3 | |||
93 | 172 | No | Rule 21.8 | |||
173 | No | Rule 21.4 | ||||
* | 174 | No | Compliance with Rule 21.8 avoids this undefined behavior in respect of 'getenv' only. | |||
175 | No | Rule 21.8 | ||||
176 | No | Rule 21.9 | ||||
177 | No | Rule 21.9 | ||||
* | 178 | No | Rule 21.9 | |||
95 | 179 | No | ||||
96 | 180 | No | Dir 4.11 | |||
181 | No | Dir 4.11 | ||||
* | 182 | No | Compliance with Rule 21.10 avoids this undefined behavior except in respect of 'wcsxfrm'. | |||
183 | No | Dir 4.11 | ||||
184 | Yes | Rule 21.11 | ||||
185 | Yes | Rule 21.11 | ||||
186 | No | Rule 21.6 | ||||
187 | No | Dir 4.11 | ||||
188 | No | |||||
189 | No | Dir 4.11 | ||||
190 | No | |||||
191 | No |