MCUX CLNS
MCUX Crypto Library Normal Secure
mcuxClCore_Analysis.h
1 /*--------------------------------------------------------------------------*/
2 /* Copyright 2022-2023 NXP */
3 /* */
4 /* NXP Confidential. This software is owned or controlled by NXP and may */
5 /* only be used strictly in accordance with the applicable license terms. */
6 /* By expressly accepting such terms or by downloading, installing, */
7 /* activating and/or otherwise using the software, you are agreeing that */
8 /* you have read, and that you agree to comply with and are bound by, such */
9 /* license terms. If you do not agree to be bound by the applicable license */
10 /* terms, then you may not retain, install, activate or otherwise use the */
11 /* software. */
12 /*--------------------------------------------------------------------------*/
13 
14 #ifndef MCUXCLCORE_ANALYSIS_H_
15 #define MCUXCLCORE_ANALYSIS_H_
16 
17 #define MCUXCLCORE_ANALYSIS_STR(a) #a
18 #define MCUXCLCORE_ANALYSIS_EMPTY()
19 #define MCUXCLCORE_ANALYSIS_DEFER(id) id MCUXCLCORE_ANALYSIS_EMPTY()
20 #define MCUXCLCORE_ANALYSIS_EXPAND(...) __VA_ARGS__
21 
22 #define MCUXCLCORE_ANALYSIS_PRAGMA(x) _Pragma(#x)
23 
24 /* Example of common patterns, with either just predefined rationale, or a combination of discards. */
25 #define MCUXCLCORE_ANALYSIS_START_PATTERN_HW_READ() \
26  MCUXCLCORE_ANALYSIS_START_SUPPRESS_DISCARD_VOLATILE("Read from a HW peripheral")
27 #define MCUXCLCORE_ANALYSIS_STOP_PATTERN_HW_READ() \
28  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_DISCARD_VOLATILE()
29 
30 #define MCUXCLCORE_ANALYSIS_START_PATTERN_HW_WRITE() \
31  MCUXCLCORE_ANALYSIS_START_SUPPRESS_DISCARD_VOLATILE("Write to a HW peripheral")
32  /*MCUXCLCORE_ANALYSIS_START_SUPPRESS_CAST_TO_OBJECT("Write to a HW peripheral")*/
33 #define MCUXCLCORE_ANALYSIS_STOP_PATTERN_HW_WRITE() \
34  /*MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_CAST_TO_OBJECT()*/ \
35  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_DISCARD_VOLATILE()
36 
37 #define MCUXCLCORE_ANALYSIS_START_PATTERN_DESCRIPTIVE_IDENTIFIER() \
38  MCUXCLCORE_ANALYSIS_START_SUPPRESS_AMBIGUOUS_IDENTIFIER("Identifiers longer than 31 characters are allowed for more descriptive naming")
39 #define MCUXCLCORE_ANALYSIS_STOP_PATTERN_DESCRIPTIVE_IDENTIFIER() \
40  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_AMBIGUOUS_IDENTIFIER()
41 
42 #define MCUXCLCORE_ANALYSIS_START_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES() \
43  MCUXCLCORE_ANALYSIS_START_SUPPRESS_REINTERPRET_MEMORY("explicit pointer casts reinterpreting opaque types of workarea-like buffer objects are allowed.")
44 #define MCUXCLCORE_ANALYSIS_STOP_PATTERN_REINTERPRET_MEMORY() \
45  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_REINTERPRET_MEMORY()
46 /* Rule 11.3: applies to casts between ctx structs
47 * e.g. cast from mcuxClAead_Context_t to more specific type mcuxClAeadModes_Context_t
48 */
49 #define MCUXCLCORE_ANALYSIS_START_CAST_TO_MORE_SPECIFIC_TYPE() \
50  MCUXCLCORE_ANALYSIS_START_SUPPRESS_REINTERPRET_MEMORY("Cast to a more specific type is allowed")
51 #define MCUXCLCORE_ANALYSIS_STOP_CAST_TO_MORE_SPECIFIC_TYPE() \
52  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_REINTERPRET_MEMORY()
53 
54 #define MCUXCLCORE_ANALYSIS_START_PATTERN_EXTERNAL_HEADER() \
55  MCUXCLCORE_ANALYSIS_START_SUPPRESS_C11_EXTENSION("External header outside our control") \
56  MCUXCLCORE_ANALYSIS_START_SUPPRESS_UNDEFINED_VALUE("External header outside our control") \
57  MCUXCLCORE_ANALYSIS_START_SUPPRESS_RESERVED_MACRO_IDENTIFIER("External header outside our control") \
58  MCUXCLCORE_ANALYSIS_START_SUPPRESS_PADDED_TO_ALIGNMENT_BOUNDARY("External header outside our control")
59 #define MCUXCLCORE_ANALYSIS_STOP_PATTERN_EXTERNAL_HEADER() \
60  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_PADDED_TO_ALIGNMENT_BOUNDARY() \
61  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_RESERVED_MACRO_IDENTIFIER() \
62  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_UNDEFINED_VALUE() \
63  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_C11_EXTENSION()
64 
65 #define MCUXCLCORE_ANALYSIS_START_PATTERN_OBJ_SIZES() \
66  MCUXCLCORE_ANALYSIS_START_SUPPRESS_UNUSED_VARIABLE("Variables used to determine object sizes") \
67  MCUXCLCORE_ANALYSIS_START_SUPPRESS_MISSING_VARIABLE_DECLARATION("Variables used to determine object sizes")
68 #define MCUXCLCORE_ANALYSIS_STOP_PATTERN_OBJ_SIZES() \
69  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_MISSING_VARIABLE_DECLARATION() \
70  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_UNUSED_VARIABLE()
71 
72 #define MCUXCLCORE_ANALYSIS_START_PATTERN_FUP() \
73  MCUXCLCORE_ANALYSIS_START_SUPPRESS_MISSING_VARIABLE_DECLARATION("External declarations are generated by the FUP processing tool")
74 #define MCUXCLCORE_ANALYSIS_STOP_PATTERN_FUP() \
75  MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_MISSING_VARIABLE_DECLARATION()
76 
77 /* Example of basic violation suppression */
78 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_DEAD_CODE(rationale) \
79  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_2_1, rationale)
80 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_DEAD_CODE() \
81  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_2_1)
82 
83 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_TEXT_IN_COMMENTS(rationale) \
84  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_3_1, rationale)
85 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_TEXT_IN_COMMENTS() \
86  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_3_1)
87 
88 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_POINTER_CASTING(rationale) \
89  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_11_3, rationale)
90 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_POINTER_CASTING() \
91  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_11_3)
92 
93 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_DISCARD_VOLATILE(rationale) \
94  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wcast-qual, rationale) \
95  MCUXCLCORE_ANALYSIS_GHS_START_SUPPRESS_WARNING(1836, rationale) \
96  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_11_8, rationale)
97 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_DISCARD_VOLATILE() \
98  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_11_8) \
99  MCUXCLCORE_ANALYSIS_GHS_STOP_SUPPRESS_WARNING(1836) \
100  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wcast-qual)
101 
102 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_OUT_OF_BOUNDS_ACCESS(rationale) \
103  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_18_1, rationale)
104 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_OUT_OF_BOUNDS_ACCESS() \
105  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_18_1) \
106 
107 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_DISCARD_CONST(rationale) \
108  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wcast-qual, rationale) \
109  MCUXCLCORE_ANALYSIS_GHS_START_SUPPRESS_WARNING(1836, rationale) \
110  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_11_8, rationale)
111 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_DISCARD_CONST() \
112  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_11_8) \
113  MCUXCLCORE_ANALYSIS_GHS_STOP_SUPPRESS_WARNING(1836) \
114  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wcast-qual)
115 
116 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_DISCARD_CONST_QUALIFIER(rationale) \
117  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_11_8, rationale)
118 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_DISCARD_CONST_QUALIFIER() \
119  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_11_8)
120 
121 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_REINTERPRET_MEMORY_BETWEEN_INAPT_ESSENTIAL_TYPES(rationale) \
122  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_11_3, rationale)
123 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_REINTERPRET_MEMORY_BETWEEN_INAPT_ESSENTIAL_TYPES() \
124  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_11_3)
125 
126 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_REINTERPRET_MEMORY(rationale) \
127  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_11_3, rationale)
128 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_REINTERPRET_MEMORY() \
129  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_11_3)
130 
131 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_TYPECAST_INTEGER_TO_POINTER(rationale) \
132  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_11_4, rationale) \
133  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(CERT_INT36_C, rationale) \
134  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(CERT_MSC15_C, rationale)
135 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_TYPECAST_INTEGER_TO_POINTER() \
136  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(CERT_MSC15_C) \
137  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(CERT_INT36_C) \
138  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_11_4)
139 
140 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_AMBIGUOUS_IDENTIFIER(rationale) \
141  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_5_1, rationale)
142 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_AMBIGUOUS_IDENTIFIER() \
143  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_5_1)
144 
145 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_REINTERPRET_STRUCT(rationale) \
146  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_11_1, rationale)
147 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_REINTERPRET_STRUCT() \
148  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_11_1)
149 
150 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_DECLARED_BUT_NEVER_REFERENCED(rationale) \
151  MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(MISRA_C_2012_Rule_2_2, rationale)
152 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_DECLARED_BUT_NEVER_REFERENCED() \
153  MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(MISRA_C_2012_Rule_2_2)
154 
155 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_BOOLEAN_TYPE_FOR_CONDITIONAL_EXPRESSION() \
156  MCUXCLCORE_ANALYSIS_COVERITY_START_FALSE_POSITIVE(MISRA_C_2012_Rule_14_4, "Conditional expression does have a boolean type.")
157 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_BOOLEAN_TYPE_FOR_CONDITIONAL_EXPRESSION() \
158  MCUXCLCORE_ANALYSIS_COVERITY_STOP_FALSE_POSITIVE(MISRA_C_2012_Rule_14_4)
159 
160 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_C11_EXTENSION(rationale) \
161  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wc11-extensions, rationale)
162 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_C11_EXTENSION() \
163  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wc11-extensions)
164 
165 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_UNDEFINED_VALUE(rationale) \
166  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wundef, rationale)
167 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_UNDEFINED_VALUE() \
168  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wundef)
169 
170 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_RESERVED_IDENTIFIER(rationale) \
171  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wreserved-identifier, rationale)
172 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_RESERVED_IDENTIFIER() \
173  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wreserved-identifier)
174 
175 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_RESERVED_MACRO_IDENTIFIER(rationale) \
176  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wreserved-macro-identifier, rationale)
177 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_RESERVED_MACRO_IDENTIFIER() \
178  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wreserved-macro-identifier)
179 
180 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_MISSING_VARIABLE_DECLARATION(rationale) \
181  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wmissing-variable-declarations, rationale)
182 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_MISSING_VARIABLE_DECLARATION() \
183  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wmissing-variable-declarations)
184 
185 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_UNUSED_VARIABLE(rationale) \
186  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wunused-variable, rationale)
187 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_UNUSED_VARIABLE() \
188  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wunused-variable)
189 
190 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_PADDED_TO_ALIGNMENT_BOUNDARY(rationale) \
191  MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(-Wpadded, rationale)
192 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_PADDED_TO_ALIGNMENT_BOUNDARY() \
193  MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(-Wpadded)
194 
195 #define MCUXCLCORE_ANALYSIS_START_SUPPRESS_HARDWARE_ACCESS(rationale) \
196  MCUXCLCORE_ANALYSIS_GCC_START_SUPPRESS_WARNING(-Warray-bounds, rationale)
197 #define MCUXCLCORE_ANALYSIS_STOP_SUPPRESS_HARDWARE_ACCESS() \
198  MCUXCLCORE_ANALYSIS_GCC_STOP_SUPPRESS_WARNING(-Warray-bounds)
199 
200 /* Tool specific handling: Coverity checkers */
201 #if defined(__COVERITY__)
202 
203 #define MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(checker_identifier, rationale) \
204  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(coverity compliance block deviate checker_identifier rationale))
205 #define MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(checker_identifier) \
206  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(coverity compliance end_block checker_identifier))
207 
208 #define MCUXCLCORE_ANALYSIS_COVERITY_START_FALSE_POSITIVE(checker_identifier, rationale) \
209  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(coverity compliance block fp checker_identifier rationale))
210 #define MCUXCLCORE_ANALYSIS_COVERITY_STOP_FALSE_POSITIVE(checker_identifier) \
211  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(coverity compliance end_block checker_identifier))
212 
213 #else
214 #define MCUXCLCORE_ANALYSIS_COVERITY_START_DEVIATE(checker_identifier, rationale)
215 #define MCUXCLCORE_ANALYSIS_COVERITY_STOP_DEVIATE(checker_identifier)
216 
217 #define MCUXCLCORE_ANALYSIS_COVERITY_START_FALSE_POSITIVE(checker_identifier, rationale)
218 #define MCUXCLCORE_ANALYSIS_COVERITY_STOP_FALSE_POSITIVE(checker_identifier)
219 #endif
220 
221 /* Tool specific handling: Clang warnings */
222 #if defined(__clang__)
223 #define MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(warning_identifier, rationale) \
224  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(clang diagnostic push)) \
225  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(clang diagnostic ignored MCUXCLCORE_ANALYSIS_STR(warning_identifier)))
226 #define MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(warning_identifier) \
227  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(clang diagnostic pop))
228 #else
229 #define MCUXCLCORE_ANALYSIS_CLANG_START_SUPPRESS_WARNING(warning_identifier, rationale)
230 #define MCUXCLCORE_ANALYSIS_CLANG_STOP_SUPPRESS_WARNING(warning_identifier)
231 #endif
232 
233 /* Tool specific handling: GHS warnings */
234 #if defined(__ghs__)
235 #define MCUXCLCORE_ANALYSIS_GHS_START_SUPPRESS_WARNING(warning_identifier, rationale) \
236  _Pragma("ghs nowarning " ## warning_identifier)
237 #define MCUXCLCORE_ANALYSIS_GHS_STOP_SUPPRESS_WARNING(warning_identifier) \
238  _Pragma("ghs endnowarning")
239 #else
240 #define MCUXCLCORE_ANALYSIS_GHS_START_SUPPRESS_WARNING(warning_identifier, rationale)
241 #define MCUXCLCORE_ANALYSIS_GHS_STOP_SUPPRESS_WARNING(warning_identifier)
242 #endif
243 
244 /* Tool specific handling: GCC warnings */
245 #if defined(__GNUC__)
246 #define MCUXCLCORE_ANALYSIS_GCC_START_SUPPRESS_WARNING(warning_identifier, rationale) \
247  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(GCC diagnostic push)) \
248  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(GCC diagnostic ignored MCUXCLCORE_ANALYSIS_STR(warning_identifier)))
249 #define MCUXCLCORE_ANALYSIS_GCC_STOP_SUPPRESS_WARNING(warning_identifier) \
250  MCUXCLCORE_ANALYSIS_EXPAND(MCUXCLCORE_ANALYSIS_DEFER(MCUXCLCORE_ANALYSIS_PRAGMA)(GCC diagnostic pop))
251 #else
252 #define MCUXCLCORE_ANALYSIS_GCC_START_SUPPRESS_WARNING(warning_identifier, rationale)
253 #define MCUXCLCORE_ANALYSIS_GCC_STOP_SUPPRESS_WARNING(warning_identifier)
254 #endif
255 
256 #endif /* MCUXCLCORE_ANALYSIS_H_ */