HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
10 /// \file arch/pragmas.h
11 /// Pragmas for controlling compiler-specific behaviors.
12 ///
13 /// This header contains pragmas used to control compiler-specific behaviors.
14 /// Behaviors that are not supported or required by a certain compiler should
15 /// be implemented as a no-op.
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 #elif defined(ARCH_COMPILER_CLANG)
55 
56  #define ARCH_PRAGMA_PUSH \
57  _Pragma("clang diagnostic push")
58 
59  #define ARCH_PRAGMA_POP \
60  _Pragma("clang diagnostic pop")
61 
62  #define ARCH_PRAGMA(x) _Pragma(#x)
63 
64  #define ARCH_PRAGMA_PUSH_MACRO(macro_name) \
65  ARCH_PRAGMA(push_macro(#macro_name))
66 
67  #define ARCH_PRAGMA_POP_MACRO(macro_name) \
68  ARCH_PRAGMA(pop_macro(#macro_name))
69 
70  #define ARCH_PRAGMA_MACRO_REDEFINITION \
71  _Pragma("clang diagnostic ignored \"-Wbuiltin-macro-redefined\"")
72 
73  #define ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE \
74  _Pragma("clang diagnostic ignored \"-Wundefined-var-template\"")
75 
76  #define ARCH_PRAGMA_WRITE_STRINGS \
77  _Pragma("clang diagnostic ignored \"-Wwrite-strings\"")
78 
79  #define ARCH_PRAGMA_UNUSED_FUNCTION \
80  _Pragma("clang diagnostic ignored \"-Wunused-function\"")
81 
82  #define ARCH_PRAGMA_UNUSED_PRIVATE_FIELD \
83  _Pragma("clang diagnostic ignored \"-Wunused-private-field\"")
84 
85  #define ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION \
86  _Pragma("clang diagnostic ignored \"-Winstantiation-after-specialization\"")
87 
88  #define ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND \
89  _Pragma("clang diagnostic ignored \"-Wobjc-method-access\"")
90 
91 #elif defined(ARCH_COMPILER_MSVC)
92 
93  #define ARCH_PRAGMA_PUSH \
94  __pragma(warning(push))
95 
96  #define ARCH_PRAGMA_POP \
97  __pragma(warning(pop))
98 
99  #define ARCH_PRAGMA(x) __pragma(x)
100 
101  #define ARCH_PRAGMA_PUSH_MACRO(macro_name) \
102  __pragma(push_macro(#macro_name))
103 
104  #define ARCH_PRAGMA_POP_MACRO(macro_name) \
105  __pragma(pop_macro(#macro_name))
106 
107  #define ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS \
108  __pragma(warning(disable:4003))
109 
110  #define ARCH_PRAGMA_MACRO_REDEFINITION \
111  __pragma(warning(disable:4005))
112 
113  #define ARCH_PRAGMA_UNUSED_FUNCTION \
114  __pragma(warning(disable:4505))
115 
116  #define ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING \
117  __pragma(warning(disable:4180))
118 
119  #define ARCH_PRAGMA_ZERO_SIZED_STRUCT \
120  __pragma(warning(disable:4200))
121 
122  #define ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE \
123  __pragma(warning(disable:4251))
124 
125  #define ARCH_PRAGMA_CONVERSION_FROM_SIZET \
126  __pragma(warning(disable:4267))
127 
128  #define ARCH_PRAGMA_MAY_NOT_BE_ALIGNED \
129  __pragma(warning(disable:4316))
130 
131  #define ARCH_PRAGMA_SHIFT_TO_64_BITS \
132  __pragma(warning(disable:4334))
133 
134  #define ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE \
135  __pragma(warning(disable:4624))
136 
137  #define ARCH_PRAGMA_DEPRECATED_POSIX_NAME \
138  __pragma(warning(disable:4996))
139 
140  #define ARCH_PRAGMA_FORCING_TO_BOOL \
141  __pragma(warning(disable:4800))
142 
143  #define ARCH_PRAGMA_UNSAFE_USE_OF_BOOL \
144  __pragma(warning(disable:4804))
145 
146  #define ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED \
147  __pragma(warning(disable:4146))
148 
149  #define ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS \
150  __pragma(warning(disable:4275))
151 
152 #endif
153 
154 #if !defined ARCH_PRAGMA_PUSH
155  #define ARCH_PRAGMA_PUSH
156 #endif
157 
158 #if !defined ARCH_PRAGMA_POP
159  #define ARCH_PRAGMA_POP
160 #endif
161 
162 #if !defined ARCH_PRAGMA
163  #define ARCH_PRAGMA
164 #endif
165 
166 #if !defined ARCH_PRAGMA_PUSH_MACRO
167  #define ARCH_PRAGMA_PUSH_MACRO
168 #endif
169 
170 #if !defined ARCH_PRAGMA_POP_MACRO
171  #define ARCH_PRAGMA_POP_MACRO
172 #endif
173 
174 #if !defined ARCH_PRAGMA_MAYBE_UNINITIALIZED
175  #define ARCH_PRAGMA_MAYBE_UNINITIALIZED
176 #endif
177 
178 #if !defined ARCH_PRAGMA_MACRO_REDEFINITION
179  #define ARCH_PRAGMA_MACRO_REDEFINITION
180 #endif
181 
182 #if !defined ARCH_PRAGMA_WRITE_STRINGS
183  #define ARCH_PRAGMA_WRITE_STRINGS
184 #endif
185 
186 #if !defined ARCH_PRAGMA_UNUSED_FUNCTION
187  #define ARCH_PRAGMA_UNUSED_FUNCTION
188 #endif
189 
190 #if !defined ARCH_PRAGMA_STRINGOP_OVERFLOW
191  #define ARCH_PRAGMA_STRINGOP_OVERFLOW
192 #endif
193 
194 #if !defined ARCH_PRAGMA_UNUSED_PRIVATE_FIELD
195  #define ARCH_PRAGMA_UNUSED_PRIVATE_FIELD
196 #endif
197 
198 #if !defined ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS
199  #define ARCH_PRAGMA_MACRO_TOO_FEW_ARGUMENTS
200 #endif
201 
202 #if !defined ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING
203  #define ARCH_PRAGMA_QUALIFIER_HAS_NO_MEANING
204 #endif
205 
206 #if !defined ARCH_PRAGMA_ZERO_SIZED_STRUCT
207  #define ARCH_PRAGMA_ZERO_SIZED_STRUCT
208 #endif
209 
210 #if !defined ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE
211  #define ARCH_PRAGMA_NEEDS_EXPORT_INTERFACE
212 #endif
213 
214 #if !defined ARCH_PRAGMA_CONVERSION_FROM_SIZET
215  #define ARCH_PRAGMA_CONVERSION_FROM_SIZET
216 #endif
217 
218 #if !defined ARCH_PRAGMA_MAY_NOT_BE_ALIGNED
219  #define ARCH_PRAGMA_MAY_NOT_BE_ALIGNED
220 #endif
221 
222 #if !defined ARCH_PRAGMA_SHIFT_TO_64_BITS
223  #define ARCH_PRAGMA_SHIFT_TO_64_BITS
224 #endif
225 
226 #if !defined ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE
227  #define ARCH_PRAGMA_DESTRUCTOR_IMPLICIT_DEFINE
228 #endif
229 
230 #if !defined ARCH_PRAGMA_DEPRECATED_POSIX_NAME
231  #define ARCH_PRAGMA_DEPRECATED_POSIX_NAME
232 #endif
233 
234 #if !defined ARCH_PRAGMA_FORCING_TO_BOOL
235  #define ARCH_PRAGMA_FORCING_TO_BOOL
236 #endif
237 
238 #if !defined ARCH_PRAGMA_UNSAFE_USE_OF_BOOL
239  #define ARCH_PRAGMA_UNSAFE_USE_OF_BOOL
240 #endif
241 
242 #if !defined ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED
243  #define ARCH_PRAGMA_UNARY_MINUS_ON_UNSIGNED
244 #endif
245 
246 #if !defined ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION
247  #define ARCH_PRAGMA_INSTANTIATION_AFTER_SPECIALIZATION
248 #endif
249 
250 #if !defined ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE
251  #define ARCH_PRAGMA_UNDEFINED_VAR_TEMPLATE
252 #endif
253 
254 #if !defined ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND
255  #define ARCH_PRAGMA_INSTANCE_METHOD_NOT_FOUND
256 #endif
257 
258 #if !defined ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS
259  #define ARCH_PRAGMA_NON_EXPORTED_BASE_CLASS
260 #endif
261 
262 #endif // PXR_BASE_ARCH_PRAGMAS_H