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 #if ARCH_COMPILER_GCC_MAJOR >= 13
58 #define ARCH_PRAGMA_SELF_MOVE \
59 _Pragma("GCC diagnostic ignored \"-Wself-move\"")
60 #endif
61
62#elif defined(ARCH_COMPILER_CLANG)
63
64 #define ARCH_PRAGMA_PUSH \
65 _Pragma("clang diagnostic push")
66
67 #define ARCH_PRAGMA_POP \
68 _Pragma("clang diagnostic pop")
69
70 #define ARCH_PRAGMA(x) _Pragma(#x)
71
72 #define ARCH_PRAGMA_PUSH_MACRO(macro_name) \
73 ARCH_PRAGMA(push_macro(#macro_name))
74
75 #define ARCH_PRAGMA_POP_MACRO(macro_name) \
76 ARCH_PRAGMA(pop_macro(#macro_name))
77
78 #define ARCH_PRAGMA_MACRO_REDEFINITION \
79 _Pragma("clang diagnostic ignored \"-Wbuiltin-macro-redefined\"")
80
81 #define ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE \
82 _Pragma("clang diagnostic ignored \"-Wundefined-var-template\"")
83
84 #define ARCH_PRAGMA_WRITE_STRINGS \
85 _Pragma("clang diagnostic ignored \"-Wwrite-strings\"")
86
87 #define ARCH_PRAGMA_UNUSED_FUNCTION \
88 _Pragma("clang diagnostic ignored \"-Wunused-function\"")
89
90 #define ARCH_PRAGMA_UNUSED_PRIVATE_FIELD \
91 _Pragma("clang diagnostic ignored \"-Wunused-private-field\"")
92
93 #define ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION \
94 _Pragma("clang diagnostic ignored \"-Winstantiation-after-specialization\"")
95
96 #define ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND \
97 _Pragma("clang diagnostic ignored \"-Wobjc-method-access\"")
98
99 #define ARCH_PRAGMA_SELF_MOVE \
100 _Pragma("clang diagnostic ignored \"-Wself-move\"")
101
102 #define ARCH_PRAGMA_SELF_ASSIGN_OVERLOADED \
103 _Pragma("clang diagnostic ignored \"-Wself-assign-overloaded\"")
104
105#elif defined(ARCH_COMPILER_MSVC)
106
107 #define ARCH_PRAGMA_PUSH \
108 __pragma(warning(push))
109
110 #define ARCH_PRAGMA_POP \
111 __pragma(warning(pop))
112
113 #define ARCH_PRAGMA(x) __pragma(x)
114
115 #define ARCH_PRAGMA_PUSH_MACRO(macro_name) \
116 __pragma(push_macro(#macro_name))
117
118 #define ARCH_PRAGMA_POP_MACRO(macro_name) \
119 __pragma(pop_macro(#macro_name))
120
121 #define ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS \
122 __pragma(warning(disable:4003))
123
124 #define ARCH_PRAGMA_MACRO_REDEFINITION \
125 __pragma(warning(disable:4005))
126
127 #define ARCH_PRAGMA_UNUSED_FUNCTION \
128 __pragma(warning(disable:4505))
129
130 #define ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING \
131 __pragma(warning(disable:4180))
132
133 #define ARCH_PRAGMA_ZERO_SIZED_STRUCT \
134 __pragma(warning(disable:4200))
135
136 #define ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE \
137 __pragma(warning(disable:4251))
138
139 #define ARCH_PRAGMA_CONVERSION_FROM_SIZET \
140 __pragma(warning(disable:4267))
141
142 #define ARCH_PRAGMA_MAY_NOT_BE_ALIGNED \
143 __pragma(warning(disable:4316))
144
145 #define ARCH_PRAGMA_SHIFT_TO_64_BITS \
146 __pragma(warning(disable:4334))
147
148 #define ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE \
149 __pragma(warning(disable:4624))
150
151 #define ARCH_PRAGMA_DEPRECATED \
152 __pragma(warning(disable:4996))
153
154 #define ARCH_PRAGMA_FORCING_TO_BOOL \
155 __pragma(warning(disable:4800))
156
157 #define ARCH_PRAGMA_UNSAFE_USE_OF_BOOL \
158 __pragma(warning(disable:4804))
159
160 #define ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED \
161 __pragma(warning(disable:4146))
162
163 #define ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS \
164 __pragma(warning(disable:4275))
165
166#endif
167
168#if !defined ARCH_PRAGMA_PUSH
169 #define ARCH_PRAGMA_PUSH
170#endif
171
172#if !defined ARCH_PRAGMA_POP
173 #define ARCH_PRAGMA_POP
174#endif
175
176#if !defined ARCH_PRAGMA
177 #define ARCH_PRAGMA
178#endif
179
180#if !defined ARCH_PRAGMA_PUSH_MACRO
181 #define ARCH_PRAGMA_PUSH_MACRO
182#endif
183
184#if !defined ARCH_PRAGMA_POP_MACRO
185 #define ARCH_PRAGMA_POP_MACRO
186#endif
187
188#if !defined ARCH_PRAGMA_MAYBE_UNINITIALIZED
189 #define ARCH_PRAGMA_MAYBE_UNINITIALIZED
190#endif
191
192#if !defined ARCH_PRAGMA_MACRO_REDEFINITION
193 #define ARCH_PRAGMA_MACRO_REDEFINITION
194#endif
195
196#if !defined ARCH_PRAGMA_WRITE_STRINGS
197 #define ARCH_PRAGMA_WRITE_STRINGS
198#endif
199
200#if !defined ARCH_PRAGMA_UNUSED_FUNCTION
201 #define ARCH_PRAGMA_UNUSED_FUNCTION
202#endif
203
204#if !defined ARCH_PRAGMA_STRINGOP_OVERFLOW
205 #define ARCH_PRAGMA_STRINGOP_OVERFLOW
206#endif
207
208#if !defined ARCH_PRAGMA_ARRAY_BOUNDS
209 #define ARCH_PRAGMA_ARRAY_BOUNDS
210#endif
211
212#if !defined ARCH_PRAGMA_UNUSED_PRIVATE_FIELD
213 #define ARCH_PRAGMA_UNUSED_PRIVATE_FIELD
214#endif
215
216#if !defined ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS
217 #define ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS
218#endif
219
220#if !defined ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING
221 #define ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING
222#endif
223
224#if !defined ARCH_PRAGMA_ZERO_SIZED_STRUCT
225 #define ARCH_PRAGMA_ZERO_SIZED_STRUCT
226#endif
227
228#if !defined ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE
229 #define ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE
230#endif
231
232#if !defined ARCH_PRAGMA_CONVERSION_FROM_SIZET
233 #define ARCH_PRAGMA_CONVERSION_FROM_SIZET
234#endif
235
236#if !defined ARCH_PRAGMA_MAY_NOT_BE_ALIGNED
237 #define ARCH_PRAGMA_MAY_NOT_BE_ALIGNED
238#endif
239
240#if !defined ARCH_PRAGMA_SHIFT_TO_64_BITS
241 #define ARCH_PRAGMA_SHIFT_TO_64_BITS
242#endif
243
244#if !defined ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE
245 #define ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE
246#endif
247
248#if !defined ARCH_PRAGMA_DEPRECATED
249 #define ARCH_PRAGMA_DEPRECATED
250#endif
251
252#if !defined ARCH_PRAGMA_FORCING_TO_BOOL
253 #define ARCH_PRAGMA_FORCING_TO_BOOL
254#endif
255
256#if !defined ARCH_PRAGMA_UNSAFE_USE_OF_BOOL
257 #define ARCH_PRAGMA_UNSAFE_USE_OF_BOOL
258#endif
259
260#if !defined ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED
261 #define ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED
262#endif
263
264#if !defined ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION
265 #define ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION
266#endif
267
268#if !defined ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE
269 #define ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE
270#endif
271
272#if !defined ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND
273 #define ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND
274#endif
275
276#if !defined ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS
277 #define ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS
278#endif
279
280#if !defined ARCH_PRAGMA_SELF_MOVE
281 #define ARCH_PRAGMA_SELF_MOVE
282#endif
283
284#if !defined ARCH_PRAGMA_SELF_ASSIGN_OVERLOADED
285 #define ARCH_PRAGMA_SELF_ASSIGN_OVERLOADED
286#endif
287
288#endif // PXR_BASE_ARCH_PRAGMAS_H