diff --git mfbt/Alignment.h mfbt/Alignment.h index e0843ca..353ec36 100644 --- mozilla/mfbt/Alignment.h +++ mozilla/mfbt/Alignment.h @@ -9,11 +9,20 @@ #ifndef mozilla_Alignment_h #define mozilla_Alignment_h +#include "mozilla/Attributes.h" + #include #include namespace mozilla { +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +#define MOZ_ALIGNOF(T) alignof(T) +#elif defined(__GNUC__) +#define MOZ_ALIGNOF(T) __alignof__(T) +#elif defined(_MSC_VER) +#define MOZ_ALIGNOF(T) __alignof(T) +#else /* * This class, and the corresponding macro MOZ_ALIGNOF, figures out how many * bytes of alignment a given type needs. @@ -32,6 +41,7 @@ public: }; #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder::alignment +#endif /* * Declare the MOZ_ALIGNED_DECL macro for declaring aligned types. @@ -43,7 +53,10 @@ public: * will declare a two-character array |arr| aligned to 8 bytes. */ -#if defined(__GNUC__) +#if defined(MOZ_HAVE_CXX11_ALIGNAS) +# define MOZ_ALIGNED_DECL(_type, _align) \ + alignas(_align) _type +#elif defined(__GNUC__) # define MOZ_ALIGNED_DECL(_type, _align) \ _type __attribute__((aligned(_align))) #elif defined(_MSC_VER) diff --git mfbt/Attributes.h mfbt/Attributes.h index d317766..ddb13da 100644 --- mozilla/mfbt/Attributes.h +++ mozilla/mfbt/Attributes.h @@ -51,6 +51,7 @@ * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug */ # if _MSC_VER >= 1800 +# define MOZ_HAVE_CXX11_ALIGNAS # define MOZ_HAVE_CXX11_DELETE # endif # if _MSC_VER >= 1700 @@ -74,6 +75,9 @@ # ifndef __has_extension # define __has_extension __has_feature /* compatibility, for older versions of clang */ # endif +# if __has_extension(cxx_alignas) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif # if __has_extension(cxx_constexpr) # define MOZ_HAVE_CXX11_CONSTEXPR # endif @@ -95,6 +99,9 @@ # endif #elif defined(__GNUC__) # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L +# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0) +# define MOZ_HAVE_CXX11_ALIGNAS +# endif # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) # define MOZ_HAVE_CXX11_OVERRIDE # define MOZ_HAVE_CXX11_FINAL final