UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ClangPlatformCompilerPreSetup.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5// HEADER_UNIT_UNSUPPORTED - Clang not supporting header units
6
7#ifdef __clang__
8
9#pragma clang diagnostic warning "-Wdeprecated-declarations"
10
11#ifndef PRAGMA_DISABLE_DEPRECATION_WARNINGS
12 #define PRAGMA_DISABLE_DEPRECATION_WARNINGS \
13 _Pragma("clang diagnostic push") \
14 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
15#endif // PRAGMA_DISABLE_DEPRECATION_WARNINGS
16
17#ifndef PRAGMA_ENABLE_DEPRECATION_WARNINGS
18 #define PRAGMA_ENABLE_DEPRECATION_WARNINGS \
19 _Pragma("clang diagnostic pop")
20#endif // PRAGMA_ENABLE_DEPRECATION_WARNINGS
21
22#ifndef PRAGMA_DISABLE_OVERLOADED_VIRTUAL_WARNINGS
23 #define PRAGMA_DISABLE_OVERLOADED_VIRTUAL_WARNINGS \
24 _Pragma("clang diagnostic push") \
25 _Pragma("clang diagnostic ignored \"-Woverloaded-virtual\"")
26#endif // PRAGMA_DISABLE_OVERLOADED_VIRTUAL_WARNINGS
27
28#ifndef PRAGMA_ENABLE_OVERLOADED_VIRTUAL_WARNINGS
29 #define PRAGMA_ENABLE_OVERLOADED_VIRTUAL_WARNINGS \
30 _Pragma("clang diagnostic pop")
31#endif // PRAGMA_ENABLE_OVERLOADED_VIRTUAL_WARNINGS
32
33#ifndef PRAGMA_DISABLE_MISSING_BRACES_WARNINGS
34 #define PRAGMA_DISABLE_MISSING_BRACES_WARNINGS \
35 _Pragma("clang diagnostic push") \
36 _Pragma("clang diagnostic ignored \"-Wmissing-braces\"")
37#endif // PRAGMA_DISABLE_MISSING_BRACES_WARNINGS
38
39#ifndef PRAGMA_ENABLE_MISSING_BRACES_WARNINGS
40 #define PRAGMA_ENABLE_MISSING_BRACES_WARNINGS \
41 _Pragma("clang diagnostic pop")
42#endif // PRAGMA_ENABLE_MISSING_BRACES_WARNINGS
43
44#ifndef PRAGMA_DISABLE_SHADOW_VARIABLE_WARNINGS
45 #define PRAGMA_DISABLE_SHADOW_VARIABLE_WARNINGS \
46 _Pragma("clang diagnostic push") \
47 _Pragma("clang diagnostic ignored \"-Wshadow\"")
48#endif // PRAGMA_DISABLE_SHADOW_VARIABLE_WARNINGS
49
50#ifndef PRAGMA_ENABLE_SHADOW_VARIABLE_WARNINGS
51 #define PRAGMA_ENABLE_SHADOW_VARIABLE_WARNINGS \
52 _Pragma("clang diagnostic pop")
53#endif // PRAGMA_ENABLE_SHADOW_VARIABLE_WARNINGS
54
55#ifndef PRAGMA_DISABLE_CPP20_EXTENSION_WARNINGS
56 #define PRAGMA_DISABLE_CPP20_EXTENSION_WARNINGS \
57 _Pragma("clang diagnostic push") \
58 _Pragma("clang diagnostic ignored \"-Wc++20-extensions\"")
59#endif // PRAGMA_DISABLE_CPP20_EXTENSION_WARNINGS
60
61#ifndef PRAGMA_ENABLE_CPP20_EXTENSION_WARNINGS
62 #define PRAGMA_ENABLE_CPP20_EXTENSION_WARNINGS \
63 _Pragma("clang diagnostic pop")
64#endif // PRAGMA_ENABLE_CPP20_EXTENSION_WARNINGS
65
66// Unreachable not being evaluated on clang... yet
67#ifndef PRAGMA_DISABLE_UNREACHABLE_CODE_WARNINGS
68 #define PRAGMA_DISABLE_UNREACHABLE_CODE_WARNINGS
69#endif // PRAGMA_DISABLE_UNREACHABLE_CODE_WARNINGS
70
71#ifndef PRAGMA_RESTORE_UNREACHABLE_CODE_WARNINGS
72 #define PRAGMA_RESTORE_UNREACHABLE_CODE_WARNINGS
73#endif // PRAGMA_RESTORE_UNREACHABLE_CODE_WARNINGS
74
75#ifndef PRAGMA_PUSH_ATTRIBUTE_MINSIZE_FUNCTIONS
76 #define PRAGMA_PUSH_ATTRIBUTE_MINSIZE_FUNCTIONS _Pragma("clang attribute push(__attribute__((minsize)), apply_to=function)")
77#endif // PRAGMA_PUSH_ATTRIBUTE_MINSIZE_FUNCTIONS
78
79#ifndef PRAGMA_POP_ATTRIBUTE_MINSIZE_FUNCTIONS
80 #define PRAGMA_POP_ATTRIBUTE_MINSIZE_FUNCTIONS _Pragma("clang attribute pop")
81#endif // PRAGMA_POP_ATTRIBUTE_MINSIZE_FUNCTIONS
82
83#if __has_warning("-Wimplicit-float-conversion")
84#define DISABLE_IMPLICIT_FLOAT_CONVERSION_FRAGMENT _Pragma("clang diagnostic ignored \"-Wimplicit-float-conversion\"")
85#else
86#define DISABLE_IMPLICIT_FLOAT_CONVERSION_FRAGMENT
87#endif
88
89#if __has_warning("-Wimplicit-float-conversion")
90#define FORCE_IMPLICIT_FLOAT_CONVERSION_FRAGMENT _Pragma("clang diagnostic warning \"-Wimplicit-float-conversion\"")
91#else
92#define FORCE_IMPLICIT_FLOAT_CONVERSION_FRAGMENT
93#endif
94
95#if __has_warning("-Wimplicit-int-conversion")
96#define DISABLE_IMPLICIT_INT_CONVERSION_FRAGMENT _Pragma("clang diagnostic ignored \"-Wimplicit-int-conversion\"")
97#else
98#define DISABLE_IMPLICIT_INT_CONVERSION_FRAGMENT
99#endif
100
101#if __has_warning("-Wimplicit-int-conversion")
102#define FORCE_IMPLICIT_INT_CONVERSION_FRAGMENT _Pragma("clang diagnostic warning \"-Wimplicit-int-conversion\"")
103#else
104#define FORCE_IMPLICIT_INT_CONVERSION_FRAGMENT
105#endif
106
107#ifndef PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNINGS
108 #define PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNINGS \
109 _Pragma("clang diagnostic push") \
110 _Pragma("clang diagnostic ignored \"-Wfloat-conversion\"") \
111 DISABLE_IMPLICIT_FLOAT_CONVERSION_FRAGMENT \
112 DISABLE_IMPLICIT_INT_CONVERSION_FRAGMENT \
113 _Pragma("clang diagnostic ignored \"-Wc++11-narrowing\"")
114#endif // PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNINGS
115
116#ifndef PRAGMA_ENABLE_UNSAFE_TYPECAST_WARNINGS
117 #define PRAGMA_ENABLE_UNSAFE_TYPECAST_WARNINGS \
118 UE_DEPRECATED_MACRO(5.0, "The PRAGMA_ENABLE_UNSAFE_TYPECAST_WARNINGS macro has been deprecated in favor of PRAGMA_RESTORE_UNSAFE_TYPECAST_WARNINGS. To force enable warnings use PRAGMA_FORCE_UNSAFE_TYPECAST_WARNINGS.")
119#endif // PRAGMA_ENABLE_UNSAFE_TYPECAST_WARNINGS
120
121#ifndef PRAGMA_FORCE_UNSAFE_TYPECAST_WARNINGS
122 #define PRAGMA_FORCE_UNSAFE_TYPECAST_WARNINGS \
123 _Pragma("clang diagnostic push") \
124 _Pragma("clang diagnostic warning \"-Wfloat-conversion\"") \
125 FORCE_IMPLICIT_FLOAT_CONVERSION_FRAGMENT \
126 FORCE_IMPLICIT_INT_CONVERSION_FRAGMENT \
127 _Pragma("clang diagnostic warning \"-Wc++11-narrowing\"")
128#endif // PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNINGS
129
130#ifndef PRAGMA_RESTORE_UNSAFE_TYPECAST_WARNINGS
131 #define PRAGMA_RESTORE_UNSAFE_TYPECAST_WARNINGS \
132 _Pragma("clang diagnostic pop")
133#endif // PRAGMA_RESTORE_UNSAFE_TYPECAST_WARNINGS
134
135#ifndef PRAGMA_DISABLE_SWITCH_UNHANDLED_ENUM_CASE_WARNINGS
136 #define PRAGMA_DISABLE_SWITCH_UNHANDLED_ENUM_CASE_WARNINGS \
137 _Pragma("clang diagnostic push") \
138 _Pragma("clang diagnostic ignored \"-Wswitch-enum\"")
139#endif // PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNINGS
140
141#ifndef PRAGMA_RESTORE_SWITCH_UNHANDLED_ENUM_CASE_WARNINGS
142 #define PRAGMA_RESTORE_SWITCH_UNHANDLED_ENUM_CASE_WARNINGS \
143 _Pragma("clang diagnostic pop")
144#endif // PRAGMA_RESTORE_UNSAFE_TYPECAST_WARNINGS
145
146#if __has_warning("-Wordered-compare-function-pointers")
147#define DISABLE_ORDERED_COMPARE_FUNCTION_POINTERS _Pragma("clang diagnostic ignored \"-Wordered-compare-function-pointers\"")
148#else
149#define DISABLE_ORDERED_COMPARE_FUNCTION_POINTERS
150#endif
151
152#ifndef PRAGMA_DISABLE_ORDERED_COMPARE_FUNCTION_POINTERS
153 #define PRAGMA_DISABLE_ORDERED_COMPARE_FUNCTION_POINTERS \
154 _Pragma("clang diagnostic push") \
155 DISABLE_ORDERED_COMPARE_FUNCTION_POINTERS
156#endif // PRAGMA_DISABLE_ORDERED_COMPARE_FUNCTION_POINTERS
157
158#ifndef PRAGMA_ENABLE_ORDERED_COMPARE_FUNCTION_POINTERS
159 #define PRAGMA_ENABLE_ORDERED_COMPARE_FUNCTION_POINTERS \
160 _Pragma("clang diagnostic pop")
161#endif // PRAGMA_ENABLE_ORDERED_COMPARE_FUNCTION_POINTERS
162
163#ifndef PRAGMA_DISABLE_UNDEFINED_IDENTIFIER_WARNINGS
164 #define PRAGMA_DISABLE_UNDEFINED_IDENTIFIER_WARNINGS \
165 _Pragma("clang diagnostic push") \
166 _Pragma("clang diagnostic ignored \"-Wundef\"")
167#endif // PRAGMA_DISABLE_UNDEFINED_IDENTIFIER_WARNINGS
168
169#ifndef PRAGMA_ENABLE_UNDEFINED_IDENTIFIER_WARNINGS
170 #define PRAGMA_ENABLE_UNDEFINED_IDENTIFIER_WARNINGS \
171 _Pragma("clang diagnostic pop")
172#endif // PRAGMA_ENABLE_UNDEFINED_IDENTIFIER_WARNINGS
173
174#ifndef PRAGMA_DISABLE_MISSING_VIRTUAL_DESTRUCTOR_WARNINGS
175 #define PRAGMA_DISABLE_MISSING_VIRTUAL_DESTRUCTOR_WARNINGS \
176 _Pragma("clang diagnostic push") \
177 _Pragma("clang diagnostic ignored \"-Wdelete-non-virtual-dtor\"")
178#endif // PRAGMA_DISABLE_MISSING_VIRTUAL_DESTRUCTOR_WARNINGS
179
180#ifndef PRAGMA_ENABLE_MISSING_VIRTUAL_DESTRUCTOR_WARNINGS
181 #define PRAGMA_ENABLE_MISSING_VIRTUAL_DESTRUCTOR_WARNINGS \
182 _Pragma("clang diagnostic pop")
183#endif // PRAGMA_ENABLE_MISSING_VIRTUAL_DESTRUCTOR_WARNINGS
184
185#ifndef PRAGMA_DISABLE_REORDER_WARNINGS
186 #define PRAGMA_DISABLE_REORDER_WARNINGS \
187 _Pragma("clang diagnostic push") \
188 _Pragma("clang diagnostic ignored \"-Wreorder\"")
189#endif // PRAGMA_DISABLE_REORDER_WARNINGS
190
191#ifndef PRAGMA_ENABLE_REORDER_WARNINGS
192 #define PRAGMA_ENABLE_REORDER_WARNINGS \
193 _Pragma("clang diagnostic pop")
194#endif // PRAGMA_ENABLE_REORDER_WARNINGS
195
196#ifndef PRAGMA_DISABLE_REGISTER_WARNINGS
197 #define PRAGMA_DISABLE_REGISTER_WARNINGS \
198 _Pragma("clang diagnostic push") \
199 _Pragma("clang diagnostic ignored \"-Wregister\"")
200#endif // PRAGMA_DISABLE_REGISTER_WARNINGS
201
202#ifndef PRAGMA_ENABLE_REGISTER_WARNINGS
203 #define PRAGMA_ENABLE_REGISTER_WARNINGS \
204 _Pragma("clang diagnostic pop")
205#endif // PRAGMA_ENABLE_REGISTER_WARNINGS
206
207#ifndef PRAGMA_DISABLE_MACRO_REDEFINED_WARNINGS
208 #define PRAGMA_DISABLE_MACRO_REDEFINED_WARNINGS \
209 _Pragma("clang diagnostic push") \
210 _Pragma("clang diagnostic ignored \"-Wmacro-redefined\"")
211#endif // PRAGMA_DISABLE_MACRO_REDEFINED_WARNINGS
212
213#ifndef PRAGMA_DISABLE_UNUSED_PRIVATE_FIELDS_WARNINGS
214#define PRAGMA_DISABLE_UNUSED_PRIVATE_FIELDS_WARNINGS \
215 _Pragma("clang diagnostic push") \
216 _Pragma("clang diagnostic ignored \"-Wunused-private-field\"")
217#endif // PRAGMA_DISABLE_UNUSED_PRIVATE_FIELDS_WARNINGS
218
219#ifndef PRAGMA_ENABLE_UNUSED_PRIVATE_FIELDS_WARNINGS
220#define PRAGMA_ENABLE_UNUSED_PRIVATE_FIELDS_WARNINGS \
221 _Pragma("clang diagnostic pop")
222#endif // PRAGMA_ENABLE_UNUSED_PRIVATE_FIELDS_WARNINGS
223
224#ifndef PRAGMA_ENABLE_MACRO_REDEFINED_WARNINGS
225 #define PRAGMA_ENABLE_MACRO_REDEFINED_WARNINGS \
226 _Pragma("clang diagnostic pop")
227#endif // PRAGMA_ENABLE_MACRO_REDEFINED_WARNINGS
228
229#if __has_warning("-Wuninitialized-const-reference")
230#define DISABLE_UNINITIALIZED_CONST_REFERENCE _Pragma("clang diagnostic ignored \"-Wuninitialized-const-reference\"")
231#else
232#define DISABLE_UNINITIALIZED_CONST_REFERENCE
233#endif
234
235#ifndef PRAGMA_DISABLE_UNINITIALIZED_CONST_REFERENCE_WARNINGS
236 #define PRAGMA_DISABLE_UNINITIALIZED_CONST_REFERENCE_WARNINGS \
237 _Pragma("clang diagnostic push") \
238 DISABLE_UNINITIALIZED_CONST_REFERENCE
239#endif // PRAGMA_DISABLE_UNINITIALIZED_CONST_REFERENCE_WARNINGS
240
241#ifndef PRAGMA_ENABLE_UNINITIALIZED_CONST_REFERENCE_WARNINGS
242 #define PRAGMA_ENABLE_UNINITIALIZED_CONST_REFERENCE_WARNINGS \
243 _Pragma("clang diagnostic pop")
244#endif // PRAGMA_ENABLE_UNINITIALIZED_CONST_REFERENCE_WARNINGS
245
246#if __has_warning("-Wenum-constexpr-conversion")
247#define DISABLE_ENUM_CONSTEXPR_CONVERSION _Pragma("clang diagnostic ignored \"-Wenum-constexpr-conversion\"")
248#else
249#define DISABLE_ENUM_CONSTEXPR_CONVERSION
250#endif
251
252#ifndef PRAGMA_DISABLE_ENUM_CONSTEXPR_CONVERSION_WARNINGS
253#define PRAGMA_DISABLE_ENUM_CONSTEXPR_CONVERSION_WARNINGS \
254 _Pragma("clang diagnostic push") \
255 DISABLE_ENUM_CONSTEXPR_CONVERSION
256#endif // PRAGMA_DISABLE_ENUM_CONSTEXPR_CONVERSION_WARNINGS
257
258#ifndef PRAGMA_ENABLE_ENUM_CONSTEXPR_CONVERSION_WARNINGS
259#define PRAGMA_ENABLE_ENUM_CONSTEXPR_CONVERSION_WARNINGS \
260 _Pragma("clang diagnostic pop")
261#endif // PRAGMA_ENABLE_ENUM_CONSTEXPR_CONVERSION_WARNINGS
262
263#if __has_warning("-Wdeprecated-copy-with-user-provided-copy")
264#define DISABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY _Pragma("clang diagnostic ignored \"-Wdeprecated-copy-with-user-provided-copy\"")
265#else
266#define DISABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY
267#endif
268
269#ifndef PRAGMA_DISABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY_WARNINGS
270#define PRAGMA_DISABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY_WARNINGS \
271 _Pragma("clang diagnostic push") \
272 DISABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY
273#endif // PRAGMA_DISABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY_WARNINGS
274
275#ifndef PRAGMA_ENABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY_WARNINGS
276#define PRAGMA_ENABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY_WARNINGS \
277 _Pragma("clang diagnostic pop")
278#endif // PRAGMA_ENABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY_WARNINGS
279
280#if __has_warning("-Wnonportable-include-path")
281#define DISABLE_NONPORTABLE_INCLUDE_PATH _Pragma("clang diagnostic ignored \"-Wnonportable-include-path\"")
282#else
283#define DISABLE_NONPORTABLE_INCLUDE_PATH
284#endif
285
286#ifndef PRAGMA_DISABLE_NONPORTABLE_INCLUDE_PATH_WARNING
287#define PRAGMA_DISABLE_NONPORTABLE_INCLUDE_PATH_WARNING \
288 _Pragma("clang diagnostic push") \
289 DISABLE_NONPORTABLE_INCLUDE_PATH
290#endif // PRAGMA_DISABLE_NONPORTABLE_INCLUDE_PATH_WARNING
291
292#ifndef PRAGMA_ENABLE_NONPORTABLE_INCLUDE_PATH_WARNING
293#define PRAGMA_ENABLE_NONPORTABLE_INCLUDE_PATH_WARNING \
294 _Pragma("clang diagnostic pop")
295#endif // PRAGMA_ENABLE_NONPORTABLE_INCLUDE_PATH_WARNING
296
297
298#ifndef PRAGMA_POP
299 #define PRAGMA_POP \
300 _Pragma("clang diagnostic pop")
301#endif // PRAGMA_POP
302
303#ifndef PRAGMA_PUSH_PLATFORM_DEFAULT_PACKING
304 #define PRAGMA_PUSH_PLATFORM_DEFAULT_PACKING
305#endif // PRAGMA_PUSH_PLATFORM_DEFAULT_PACKING
306
307#ifndef PRAGMA_POP_PLATFORM_DEFAULT_PACKING
308 #define PRAGMA_POP_PLATFORM_DEFAULT_PACKING
309#endif // PRAGMA_POP_PLATFORM_DEFAULT_PACKING
310
311#ifndef EMIT_CUSTOM_WARNING_AT_LINE
312 #define EMIT_CUSTOM_WARNING_AT_LINE(Line, Warning) \
313 _Pragma(PREPROCESSOR_TO_STRING(message(Warning)))
314#endif // EMIT_CUSTOM_WARNING_AT_LINE
315
316#ifndef EMIT_CUSTOM_ERROR_AT_LINE
317 #define EMIT_CUSTOM_ERROR_AT_LINE(Line, Error) \
318 _Pragma(PREPROCESSOR_TO_STRING(message(Error)))
319#endif // EMIT_CUSTOM_ERROR_AT_LINE
320
321#ifndef UE_COMPILER_THIRD_PARTY_INCLUDES_START
322 #define UE_COMPILER_THIRD_PARTY_INCLUDES_START \
323 PRAGMA_DISABLE_REORDER_WARNINGS \
324 PRAGMA_DISABLE_SHADOW_VARIABLE_WARNINGS \
325 PRAGMA_DISABLE_UNDEFINED_IDENTIFIER_WARNINGS \
326 PRAGMA_DISABLE_MISSING_VIRTUAL_DESTRUCTOR_WARNINGS \
327 PRAGMA_DISABLE_DEPRECATION_WARNINGS \
328 PRAGMA_DISABLE_OVERLOADED_VIRTUAL_WARNINGS \
329 PRAGMA_DISABLE_MISSING_BRACES_WARNINGS \
330 PRAGMA_DISABLE_UNINITIALIZED_CONST_REFERENCE_WARNINGS \
331 PRAGMA_DISABLE_UNREACHABLE_CODE_WARNINGS \
332 PRAGMA_DISABLE_ORDERED_COMPARE_FUNCTION_POINTERS \
333 PRAGMA_DISABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY_WARNINGS
334#endif
335
336#ifndef UE_COMPILER_THIRD_PARTY_INCLUDES_END
337 #define UE_COMPILER_THIRD_PARTY_INCLUDES_END \
338 PRAGMA_ENABLE_DEPRECATED_COPY_WITH_USER_DEFINED_COPY_WARNINGS \
339 PRAGMA_ENABLE_ORDERED_COMPARE_FUNCTION_POINTERS \
340 PRAGMA_RESTORE_UNREACHABLE_CODE_WARNINGS \
341 PRAGMA_ENABLE_UNINITIALIZED_CONST_REFERENCE_WARNINGS \
342 PRAGMA_ENABLE_MISSING_BRACES_WARNINGS \
343 PRAGMA_ENABLE_OVERLOADED_VIRTUAL_WARNINGS \
344 PRAGMA_ENABLE_DEPRECATION_WARNINGS \
345 PRAGMA_ENABLE_MISSING_VIRTUAL_DESTRUCTOR_WARNINGS \
346 PRAGMA_ENABLE_UNDEFINED_IDENTIFIER_WARNINGS \
347 PRAGMA_ENABLE_SHADOW_VARIABLE_WARNINGS \
348 PRAGMA_ENABLE_REORDER_WARNINGS
349#endif
350
351#endif // __clang__
352