Loading...
Searching...
No Matches
pragmas.h
Go to the documentation of this file.
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7#ifndef PXR_BASE_ARCH_PRAGMAS_H
8#define PXR_BASE_ARCH_PRAGMAS_H
9
16
17#include "pxr/base/arch/defines.h"
18
19#if defined(ARCH_COMPILER_GCC)
20
21 #define ARCH_PRAGMA_PUSH \
22 _Pragma("GCC diagnostic push")
23
24 #define ARCH_PRAGMA_POP \
25 _Pragma("GCC diagnostic pop")
26
27 #define ARCH_PRAGMA(x) _Pragma(#x)
28
29 #define ARCH_PRAGMA_PUSH_MACRO(macro_name) \
30 ARCH_PRAGMA(push_macro(#macro_name))
31
32 #define ARCH_PRAGMA_POP_MACRO(macro_name) \
33 ARCH_PRAGMA(pop_macro(#macro_name))
34
35 // Convert errors about variables that may be used before initialization
36 // into warnings.
37 //
38 // This works around GCC bug 47679.
39 #define ARCH_PRAGMA_MAYBE_UNINITIALIZED \
40 _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
41
42 #define ARCH_PRAGMA_MACRO_REDEFINITION \
43 _Pragma("GCC diagnostic ignored \"-Wbuiltin-macro-redefined\"")
44
45 #define ARCH_PRAGMA_WRITE_STRINGS \
46 _Pragma("GCC diagnostic ignored \"-Wwrite-strings\"")
47
48 #define ARCH_PRAGMA_UNUSED_FUNCTION \
49 _Pragma("GCC diagnostic ignored \"-Wunused-function\"")
50
51 #define ARCH_PRAGMA_STRINGOP_OVERFLOW \
52 _Pragma("GCC diagnostic ignored \"-Wstringop-overflow=\"")
53
54 #define ARCH_PRAGMA_ARRAY_BOUNDS \
55 _Pragma("GCC diagnostic ignored \"-Warray-bounds\"")
56
57 #define ARCH_PRAGMA_DEPRECATED \
58 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
59
60 #if ARCH_COMPILER_GCC_MAJOR >= 13
61 #define ARCH_PRAGMA_SELF_MOVE \
62 _Pragma("GCC diagnostic ignored \"-Wself-move\"")
63 #endif
64
65#elif defined(ARCH_COMPILER_CLANG)
66
67 #define ARCH_PRAGMA_PUSH \
68 _Pragma("clang diagnostic push")
69
70 #define ARCH_PRAGMA_POP \
71 _Pragma("clang diagnostic pop")
72
73 #define ARCH_PRAGMA(x) _Pragma(#x)
74
75 #define ARCH_PRAGMA_PUSH_MACRO(macro_name) \
76 ARCH_PRAGMA(push_macro(#macro_name))
77
78 #define ARCH_PRAGMA_POP_MACRO(macro_name) \
79 ARCH_PRAGMA(pop_macro(#macro_name))
80
81 #define ARCH_PRAGMA_MACRO_REDEFINITION \
82 _Pragma("clang diagnostic ignored \"-Wbuiltin-macro-redefined\"")
83
84 #define ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE \
85 _Pragma("clang diagnostic ignored \"-Wundefined-var-template\"")
86
87 #define ARCH_PRAGMA_WRITE_STRINGS \
88 _Pragma("clang diagnostic ignored \"-Wwrite-strings\"")
89
90 #define ARCH_PRAGMA_UNUSED_FUNCTION \
91 _Pragma("clang diagnostic ignored \"-Wunused-function\"")
92
93 #define ARCH_PRAGMA_UNUSED_PRIVATE_FIELD \
94 _Pragma("clang diagnostic ignored \"-Wunused-private-field\"")
95
96 #define ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION \
97 _Pragma("clang diagnostic ignored \"-Winstantiation-after-specialization\"")
98
99 #define ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND \
100 _Pragma("clang diagnostic ignored \"-Wobjc-method-access\"")
101
102 #define ARCH_PRAGMA_SELF_MOVE \
103 _Pragma("clang diagnostic ignored \"-Wself-move\"")
104
105 #define ARCH_PRAGMA_SELF_ASSIGN_OVERLOADED \
106 _Pragma("clang diagnostic ignored \"-Wself-assign-overloaded\"")
107
108 #define ARCH_PRAGMA_DEPRECATED \
109 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
110
111#elif defined(ARCH_COMPILER_MSVC)
112
113 #define ARCH_PRAGMA_PUSH \
114 __pragma(warning(push))
115
116 #define ARCH_PRAGMA_POP \
117 __pragma(warning(pop))
118
119 #define ARCH_PRAGMA(x) __pragma(x)
120
121 #define ARCH_PRAGMA_PUSH_MACRO(macro_name) \
122 __pragma(push_macro(#macro_name))
123
124 #define ARCH_PRAGMA_POP_MACRO(macro_name) \
125 __pragma(pop_macro(#macro_name))
126
127 #define ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS \
128 __pragma(warning(disable:4003))
129
130 #define ARCH_PRAGMA_MACRO_REDEFINITION \
131 __pragma(warning(disable:4005))
132
133 #define ARCH_PRAGMA_UNUSED_FUNCTION \
134 __pragma(warning(disable:4505))
135
136 #define ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING \
137 __pragma(warning(disable:4180))
138
139 #define ARCH_PRAGMA_ZERO_SIZED_STRUCT \
140 __pragma(warning(disable:4200))
141
142 #define ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE \
143 __pragma(warning(disable:4251))
144
145 #define ARCH_PRAGMA_CONVERSION_FROM_SIZET \
146 __pragma(warning(disable:4267))
147
148 #define ARCH_PRAGMA_MAY_NOT_BE_ALIGNED \
149 __pragma(warning(disable:4316))
150
151 #define ARCH_PRAGMA_SHIFT_TO_64_BITS \
152 __pragma(warning(disable:4334))
153
154 #define ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE \
155 __pragma(warning(disable:4624))
156
157 #define ARCH_PRAGMA_DEPRECATED \
158 __pragma(warning(disable:4996))
159
160 #define ARCH_PRAGMA_FORCING_TO_BOOL \
161 __pragma(warning(disable:4800))
162
163 #define ARCH_PRAGMA_UNSAFE_USE_OF_BOOL \
164 __pragma(warning(disable:4804))
165
166 #define ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED \
167 __pragma(warning(disable:4146))
168
169 #define ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS \
170 __pragma(warning(disable:4275))
171
172#endif
173
174#if !defined ARCH_PRAGMA_PUSH
175 #define ARCH_PRAGMA_PUSH
176#endif
177
178#if !defined ARCH_PRAGMA_POP
179 #define ARCH_PRAGMA_POP
180#endif
181
182#if !defined ARCH_PRAGMA
183 #define ARCH_PRAGMA
184#endif
185
186#if !defined ARCH_PRAGMA_PUSH_MACRO
187 #define ARCH_PRAGMA_PUSH_MACRO
188#endif
189
190#if !defined ARCH_PRAGMA_POP_MACRO
191 #define ARCH_PRAGMA_POP_MACRO
192#endif
193
194#if !defined ARCH_PRAGMA_MAYBE_UNINITIALIZED
195 #define ARCH_PRAGMA_MAYBE_UNINITIALIZED
196#endif
197
198#if !defined ARCH_PRAGMA_MACRO_REDEFINITION
199 #define ARCH_PRAGMA_MACRO_REDEFINITION
200#endif
201
202#if !defined ARCH_PRAGMA_WRITE_STRINGS
203 #define ARCH_PRAGMA_WRITE_STRINGS
204#endif
205
206#if !defined ARCH_PRAGMA_UNUSED_FUNCTION
207 #define ARCH_PRAGMA_UNUSED_FUNCTION
208#endif
209
210#if !defined ARCH_PRAGMA_STRINGOP_OVERFLOW
211 #define ARCH_PRAGMA_STRINGOP_OVERFLOW
212#endif
213
214#if !defined ARCH_PRAGMA_ARRAY_BOUNDS
215 #define ARCH_PRAGMA_ARRAY_BOUNDS
216#endif
217
218#if !defined ARCH_PRAGMA_UNUSED_PRIVATE_FIELD
219 #define ARCH_PRAGMA_UNUSED_PRIVATE_FIELD
220#endif
221
222#if !defined ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS
223 #define ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS
224#endif
225
226#if !defined ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING
227 #define ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING
228#endif
229
230#if !defined ARCH_PRAGMA_ZERO_SIZED_STRUCT
231 #define ARCH_PRAGMA_ZERO_SIZED_STRUCT
232#endif
233
234#if !defined ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE
235 #define ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE
236#endif
237
238#if !defined ARCH_PRAGMA_CONVERSION_FROM_SIZET
239 #define ARCH_PRAGMA_CONVERSION_FROM_SIZET
240#endif
241
242#if !defined ARCH_PRAGMA_MAY_NOT_BE_ALIGNED
243 #define ARCH_PRAGMA_MAY_NOT_BE_ALIGNED
244#endif
245
246#if !defined ARCH_PRAGMA_SHIFT_TO_64_BITS
247 #define ARCH_PRAGMA_SHIFT_TO_64_BITS
248#endif
249
250#if !defined ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE
251 #define ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE
252#endif
253
254#if !defined ARCH_PRAGMA_DEPRECATED
255 #define ARCH_PRAGMA_DEPRECATED
256#endif
257
258#if !defined ARCH_PRAGMA_FORCING_TO_BOOL
259 #define ARCH_PRAGMA_FORCING_TO_BOOL
260#endif
261
262#if !defined ARCH_PRAGMA_UNSAFE_USE_OF_BOOL
263 #define ARCH_PRAGMA_UNSAFE_USE_OF_BOOL
264#endif
265
266#if !defined ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED
267 #define ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED
268#endif
269
270#if !defined ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION
271 #define ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION
272#endif
273
274#if !defined ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE
275 #define ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE
276#endif
277
278#if !defined ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND
279 #define ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND
280#endif
281
282#if !defined ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS
283 #define ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS
284#endif
285
286#if !defined ARCH_PRAGMA_SELF_MOVE
287 #define ARCH_PRAGMA_SELF_MOVE
288#endif
289
290#if !defined ARCH_PRAGMA_SELF_ASSIGN_OVERLOADED
291 #define ARCH_PRAGMA_SELF_ASSIGN_OVERLOADED
292#endif
293
294#endif // PXR_BASE_ARCH_PRAGMAS_H