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