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