Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(448)

Side by Side Diff: include/v8config.h

Issue 1123723003: [c++11] Remove remnants of pre-C++11 delete, final and override. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/base/macros.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8CONFIG_H_ 5 #ifndef V8CONFIG_H_
6 #define V8CONFIG_H_ 6 #define V8CONFIG_H_
7 7
8 // Platform headers for feature detection below. 8 // Platform headers for feature detection below.
9 #if defined(__ANDROID__) 9 #if defined(__ANDROID__)
10 # include <sys/cdefs.h> 10 # include <sys/cdefs.h>
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 // V8_CC_MINGW - Minimalist GNU for Windows 155 // V8_CC_MINGW - Minimalist GNU for Windows
156 // V8_CC_MINGW32 - Minimalist GNU for Windows (mingw32) 156 // V8_CC_MINGW32 - Minimalist GNU for Windows (mingw32)
157 // V8_CC_MINGW64 - Minimalist GNU for Windows (mingw-w64) 157 // V8_CC_MINGW64 - Minimalist GNU for Windows (mingw-w64)
158 // V8_CC_MSVC - Microsoft Visual C/C++, or clang in cl.exe mode 158 // V8_CC_MSVC - Microsoft Visual C/C++, or clang in cl.exe mode
159 // 159 //
160 // C++11 feature detection 160 // C++11 feature detection
161 // 161 //
162 // V8_HAS_CXX11_ALIGNAS - alignas specifier supported 162 // V8_HAS_CXX11_ALIGNAS - alignas specifier supported
163 // V8_HAS_CXX11_ALIGNOF - alignof(type) operator supported 163 // V8_HAS_CXX11_ALIGNOF - alignof(type) operator supported
164 // V8_HAS_CXX11_STATIC_ASSERT - static_assert() supported 164 // V8_HAS_CXX11_STATIC_ASSERT - static_assert() supported
165 // V8_HAS_CXX11_DELETE - deleted functions supported
166 // 165 //
167 // Compiler-specific feature detection 166 // Compiler-specific feature detection
168 // 167 //
169 // V8_HAS___ALIGNOF - __alignof(type) operator supported 168 // V8_HAS___ALIGNOF - __alignof(type) operator supported
170 // V8_HAS___ALIGNOF__ - __alignof__(type) operator supported 169 // V8_HAS___ALIGNOF__ - __alignof__(type) operator supported
171 // V8_HAS_ATTRIBUTE_ALIGNED - __attribute__((aligned(n))) supported 170 // V8_HAS_ATTRIBUTE_ALIGNED - __attribute__((aligned(n))) supported
172 // V8_HAS_ATTRIBUTE_ALWAYS_INLINE - __attribute__((always_inline)) 171 // V8_HAS_ATTRIBUTE_ALWAYS_INLINE - __attribute__((always_inline))
173 // supported 172 // supported
174 // V8_HAS_ATTRIBUTE_DEPRECATED - __attribute__((deprecated)) supported 173 // V8_HAS_ATTRIBUTE_DEPRECATED - __attribute__((deprecated)) supported
175 // V8_HAS_ATTRIBUTE_NOINLINE - __attribute__((noinline)) supported 174 // V8_HAS_ATTRIBUTE_NOINLINE - __attribute__((noinline)) supported
176 // V8_HAS_ATTRIBUTE_UNUSED - __attribute__((unused)) supported 175 // V8_HAS_ATTRIBUTE_UNUSED - __attribute__((unused)) supported
177 // V8_HAS_ATTRIBUTE_VISIBILITY - __attribute__((visibility)) supported 176 // V8_HAS_ATTRIBUTE_VISIBILITY - __attribute__((visibility)) supported
178 // V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT - __attribute__((warn_unused_result)) 177 // V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT - __attribute__((warn_unused_result))
179 // supported 178 // supported
180 // V8_HAS_BUILTIN_CLZ - __builtin_clz() supported 179 // V8_HAS_BUILTIN_CLZ - __builtin_clz() supported
181 // V8_HAS_BUILTIN_CTZ - __builtin_ctz() supported 180 // V8_HAS_BUILTIN_CTZ - __builtin_ctz() supported
182 // V8_HAS_BUILTIN_EXPECT - __builtin_expect() supported 181 // V8_HAS_BUILTIN_EXPECT - __builtin_expect() supported
183 // V8_HAS_BUILTIN_FRAME_ADDRESS - __builtin_frame_address() supported 182 // V8_HAS_BUILTIN_FRAME_ADDRESS - __builtin_frame_address() supported
184 // V8_HAS_BUILTIN_POPCOUNT - __builtin_popcount() supported 183 // V8_HAS_BUILTIN_POPCOUNT - __builtin_popcount() supported
185 // V8_HAS_BUILTIN_SADD_OVERFLOW - __builtin_sadd_overflow() supported 184 // V8_HAS_BUILTIN_SADD_OVERFLOW - __builtin_sadd_overflow() supported
186 // V8_HAS_BUILTIN_SSUB_OVERFLOW - __builtin_ssub_overflow() supported 185 // V8_HAS_BUILTIN_SSUB_OVERFLOW - __builtin_ssub_overflow() supported
187 // V8_HAS_DECLSPEC_ALIGN - __declspec(align(n)) supported 186 // V8_HAS_DECLSPEC_ALIGN - __declspec(align(n)) supported
188 // V8_HAS_DECLSPEC_DEPRECATED - __declspec(deprecated) supported 187 // V8_HAS_DECLSPEC_DEPRECATED - __declspec(deprecated) supported
189 // V8_HAS_DECLSPEC_NOINLINE - __declspec(noinline) supported 188 // V8_HAS_DECLSPEC_NOINLINE - __declspec(noinline) supported
190 // V8_HAS_DECLSPEC_SELECTANY - __declspec(selectany) supported 189 // V8_HAS_DECLSPEC_SELECTANY - __declspec(selectany) supported
191 // V8_HAS___FINAL - __final supported in non-C++11 mode
192 // V8_HAS___FORCEINLINE - __forceinline supported 190 // V8_HAS___FORCEINLINE - __forceinline supported
193 // 191 //
194 // Note that testing for compilers and/or features must be done using #if 192 // Note that testing for compilers and/or features must be done using #if
195 // not #ifdef. For example, to test for Intel C++ Compiler, use: 193 // not #ifdef. For example, to test for Intel C++ Compiler, use:
196 // #if V8_CC_INTEL 194 // #if V8_CC_INTEL
197 // ... 195 // ...
198 // #endif 196 // #endif
199 197
200 #if defined(__clang__) 198 #if defined(__clang__)
201 199
(...skipping 19 matching lines...) Expand all
221 # define V8_HAS_BUILTIN_CLZ (__has_builtin(__builtin_clz)) 219 # define V8_HAS_BUILTIN_CLZ (__has_builtin(__builtin_clz))
222 # define V8_HAS_BUILTIN_CTZ (__has_builtin(__builtin_ctz)) 220 # define V8_HAS_BUILTIN_CTZ (__has_builtin(__builtin_ctz))
223 # define V8_HAS_BUILTIN_EXPECT (__has_builtin(__builtin_expect)) 221 # define V8_HAS_BUILTIN_EXPECT (__has_builtin(__builtin_expect))
224 # define V8_HAS_BUILTIN_FRAME_ADDRESS (__has_builtin(__builtin_frame_address)) 222 # define V8_HAS_BUILTIN_FRAME_ADDRESS (__has_builtin(__builtin_frame_address))
225 # define V8_HAS_BUILTIN_POPCOUNT (__has_builtin(__builtin_popcount)) 223 # define V8_HAS_BUILTIN_POPCOUNT (__has_builtin(__builtin_popcount))
226 # define V8_HAS_BUILTIN_SADD_OVERFLOW (__has_builtin(__builtin_sadd_overflow)) 224 # define V8_HAS_BUILTIN_SADD_OVERFLOW (__has_builtin(__builtin_sadd_overflow))
227 # define V8_HAS_BUILTIN_SSUB_OVERFLOW (__has_builtin(__builtin_ssub_overflow)) 225 # define V8_HAS_BUILTIN_SSUB_OVERFLOW (__has_builtin(__builtin_ssub_overflow))
228 226
229 # define V8_HAS_CXX11_ALIGNAS (__has_feature(cxx_alignas)) 227 # define V8_HAS_CXX11_ALIGNAS (__has_feature(cxx_alignas))
230 # define V8_HAS_CXX11_STATIC_ASSERT (__has_feature(cxx_static_assert)) 228 # define V8_HAS_CXX11_STATIC_ASSERT (__has_feature(cxx_static_assert))
231 # define V8_HAS_CXX11_DELETE (__has_feature(cxx_deleted_functions))
232 229
233 #elif defined(__GNUC__) 230 #elif defined(__GNUC__)
234 231
235 # define V8_CC_GNU 1 232 # define V8_CC_GNU 1
236 // Intel C++ also masquerades as GCC 3.2.0 233 // Intel C++ also masquerades as GCC 3.2.0
237 # define V8_CC_INTEL (defined(__INTEL_COMPILER)) 234 # define V8_CC_INTEL (defined(__INTEL_COMPILER))
238 # define V8_CC_MINGW32 (defined(__MINGW32__)) 235 # define V8_CC_MINGW32 (defined(__MINGW32__))
239 # define V8_CC_MINGW64 (defined(__MINGW64__)) 236 # define V8_CC_MINGW64 (defined(__MINGW64__))
240 # define V8_CC_MINGW (V8_CC_MINGW32 || V8_CC_MINGW64) 237 # define V8_CC_MINGW (V8_CC_MINGW32 || V8_CC_MINGW64)
241 238
(...skipping 21 matching lines...) Expand all
263 // g++ requires -std=c++0x or -std=gnu++0x to support C++11 functionality 260 // g++ requires -std=c++0x or -std=gnu++0x to support C++11 functionality
264 // without warnings (functionality used by the macros below). These modes 261 // without warnings (functionality used by the macros below). These modes
265 // are detectable by checking whether __GXX_EXPERIMENTAL_CXX0X__ is defined or, 262 // are detectable by checking whether __GXX_EXPERIMENTAL_CXX0X__ is defined or,
266 // more standardly, by checking whether __cplusplus has a C++11 or greater 263 // more standardly, by checking whether __cplusplus has a C++11 or greater
267 // value. Current versions of g++ do not correctly set __cplusplus, so we check 264 // value. Current versions of g++ do not correctly set __cplusplus, so we check
268 // both for forward compatibility. 265 // both for forward compatibility.
269 # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L 266 # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
270 # define V8_HAS_CXX11_ALIGNAS (V8_GNUC_PREREQ(4, 8, 0)) 267 # define V8_HAS_CXX11_ALIGNAS (V8_GNUC_PREREQ(4, 8, 0))
271 # define V8_HAS_CXX11_ALIGNOF (V8_GNUC_PREREQ(4, 8, 0)) 268 # define V8_HAS_CXX11_ALIGNOF (V8_GNUC_PREREQ(4, 8, 0))
272 # define V8_HAS_CXX11_STATIC_ASSERT (V8_GNUC_PREREQ(4, 3, 0)) 269 # define V8_HAS_CXX11_STATIC_ASSERT (V8_GNUC_PREREQ(4, 3, 0))
273 # define V8_HAS_CXX11_DELETE (V8_GNUC_PREREQ(4, 4, 0))
274 # define V8_HAS_CXX11_OVERRIDE (V8_GNUC_PREREQ(4, 7, 0))
275 # define V8_HAS_CXX11_FINAL (V8_GNUC_PREREQ(4, 7, 0))
276 # else
277 // '__final' is a non-C++11 GCC synonym for 'final', per GCC r176655.
278 # define V8_HAS___FINAL (V8_GNUC_PREREQ(4, 7, 0))
279 # endif 270 # endif
280 271
281 #elif defined(_MSC_VER) 272 #elif defined(_MSC_VER)
282 273
283 # define V8_CC_MSVC 1 274 # define V8_CC_MSVC 1
284 275
285 # define V8_HAS___ALIGNOF 1 276 # define V8_HAS___ALIGNOF 1
286 277
287 # define V8_HAS_CXX11_FINAL 1
288 # define V8_HAS_CXX11_OVERRIDE 1
289
290 # define V8_HAS_DECLSPEC_ALIGN 1 278 # define V8_HAS_DECLSPEC_ALIGN 1
291 # define V8_HAS_DECLSPEC_DEPRECATED 1 279 # define V8_HAS_DECLSPEC_DEPRECATED 1
292 # define V8_HAS_DECLSPEC_NOINLINE 1 280 # define V8_HAS_DECLSPEC_NOINLINE 1
293 # define V8_HAS_DECLSPEC_SELECTANY 1 281 # define V8_HAS_DECLSPEC_SELECTANY 1
294 282
295 # define V8_HAS___FORCEINLINE 1 283 # define V8_HAS___FORCEINLINE 1
296 284
297 #endif 285 #endif
298 286
299 287
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 // A macro to provide the compiler with branch prediction information. 334 // A macro to provide the compiler with branch prediction information.
347 #if V8_HAS_BUILTIN_EXPECT 335 #if V8_HAS_BUILTIN_EXPECT
348 # define V8_UNLIKELY(condition) (__builtin_expect(!!(condition), 0)) 336 # define V8_UNLIKELY(condition) (__builtin_expect(!!(condition), 0))
349 # define V8_LIKELY(condition) (__builtin_expect(!!(condition), 1)) 337 # define V8_LIKELY(condition) (__builtin_expect(!!(condition), 1))
350 #else 338 #else
351 # define V8_UNLIKELY(condition) (condition) 339 # define V8_UNLIKELY(condition) (condition)
352 # define V8_LIKELY(condition) (condition) 340 # define V8_LIKELY(condition) (condition)
353 #endif 341 #endif
354 342
355 343
356 // A macro to specify that a method is deleted from the corresponding class.
357 // Any attempt to use the method will always produce an error at compile time
358 // when this macro can be implemented (i.e. if the compiler supports C++11).
359 // If the current compiler does not support C++11, use of the annotated method
360 // will still cause an error, but the error will most likely occur at link time
361 // rather than at compile time. As a backstop, method declarations using this
362 // macro should be private.
363 // Use like:
364 // class A {
365 // private:
366 // A(const A& other) V8_DELETE;
367 // A& operator=(const A& other) V8_DELETE;
368 // };
369 #if V8_HAS_CXX11_DELETE
370 # define V8_DELETE = delete
371 #else
372 # define V8_DELETE /* NOT SUPPORTED */
373 #endif
374
375
376 // This macro allows to specify memory alignment for structs, classes, etc. 344 // This macro allows to specify memory alignment for structs, classes, etc.
377 // Use like: 345 // Use like:
378 // class V8_ALIGNED(16) MyClass { ... }; 346 // class V8_ALIGNED(16) MyClass { ... };
379 // V8_ALIGNED(32) int array[42]; 347 // V8_ALIGNED(32) int array[42];
380 #if V8_HAS_CXX11_ALIGNAS 348 #if V8_HAS_CXX11_ALIGNAS
381 # define V8_ALIGNED(n) alignas(n) 349 # define V8_ALIGNED(n) alignas(n)
382 #elif V8_HAS_ATTRIBUTE_ALIGNED 350 #elif V8_HAS_ATTRIBUTE_ALIGNED
383 # define V8_ALIGNED(n) __attribute__((aligned(n))) 351 # define V8_ALIGNED(n) __attribute__((aligned(n)))
384 #elif V8_HAS_DECLSPEC_ALIGN 352 #elif V8_HAS_DECLSPEC_ALIGN
385 # define V8_ALIGNED(n) __declspec(align(n)) 353 # define V8_ALIGNED(n) __declspec(align(n))
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 // Annotate a function indicating the caller must examine the return value. 396 // Annotate a function indicating the caller must examine the return value.
429 // Use like: 397 // Use like:
430 // int foo() WARN_UNUSED_RESULT; 398 // int foo() WARN_UNUSED_RESULT;
431 #if V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT 399 #if V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT
432 #define V8_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 400 #define V8_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
433 #else 401 #else
434 #define V8_WARN_UNUSED_RESULT /* NOT SUPPORTED */ 402 #define V8_WARN_UNUSED_RESULT /* NOT SUPPORTED */
435 #endif 403 #endif
436 404
437 #endif // V8CONFIG_H_ 405 #endif // V8CONFIG_H_
OLDNEW
« no previous file with comments | « no previous file | src/base/macros.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698