I see that JavaScriptCore/wtf/Vector.h has this: // FIXME: Nothing guarantees this buffer is appropriately aligned to hold objects of type T. char m_inlineBuffer[m_inlineBufferSize]; And I've heard reports about people having alignment crashes on some hardware. Something like the code below could rectify this in a portable way. This could be made into a patch as-is, though the first part of the code really belongs in a separate PlatformDefs.h-style header. I'm wondering if WebKit has a central place for such a thing that I'm not aware of. // Portable facilities to detect and set alignment #if defined(__GNUC__) || defined(__MWERKS__) #define WTF_ALIGN_OF(type) __alignof__(type) #define WTF_PREFIX_ALIGN(n) #define WTF_POSTFIX_ALIGN(n) __attribute__((aligned(n))) #elif defined(_MSC_VER) #define WTF_ALIGN_OF(type) __alignof(type) #define WTF_PREFIX_ALIGN(n) __declspec(align(n)) // n must be a literal integer, it cannot be a general constant expression. #define WTF_POSTFIX_ALIGN(n) #else #error need alignment control #endif // Portable aliasing support. #if defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 303) typedef char __attribute__((__may_alias__)) aligned_buffer_char; #else typedef char aligned_buffer_char; #endif // Portable aligned char buffer. // VC++ can't compile__declspec(align(__alignof(T)), so we solve this with template specialization. template <size_t size, size_t alignment> struct aligned_buffer { aligned_buffer_char buffer[size]; }; template<size_t size> struct aligned_buffer<size, 2> { WTF_PREFIX_ALIGN(2) aligned_buffer_char buffer[size] WTF_POSTFIX_ALIGN(2); }; template<size_t size> struct aligned_buffer<size, 4> { WTF_PREFIX_ALIGN(4) aligned_buffer_char buffer[size] WTF_POSTFIX_ALIGN(4); }; template<size_t size> struct aligned_buffer<size, 8> { WTF_PREFIX_ALIGN(8) aligned_buffer_char buffer[size] WTF_POSTFIX_ALIGN(8); }; template<size_t size> struct aligned_buffer<size, 16> { WTF_PREFIX_ALIGN(16) aligned_buffer_char buffer[size] WTF_POSTFIX_ALIGN(16); }; template<size_t size> struct aligned_buffer<size, 32> { WTF_PREFIX_ALIGN(32) aligned_buffer_char buffer[size] WTF_POSTFIX_ALIGN(32); }; template<size_t size> struct aligned_buffer<size, 64> { WTF_PREFIX_ALIGN(64) aligned_buffer_char buffer[size] WTF_POSTFIX_ALIGN(64); }; template<typename T, size_t inlineCapacity> class VectorBuffer : private VectorBufferBase<T> { . . . - T* inlineBuffer() { return reinterpret_cast<T*>(&m_inlineBuffer); } - // FIXME: Nothing guarantees this buffer is appropriately aligned to hold objects of type T. - char m_inlineBuffer[m_inlineBufferSize]; + T* inlineBuffer() { return reinterpret_cast<T*>(m_inlineBuffer.buffer); } + aligned_buffer<m_inlineBufferSize, WTF_ALIGN_OF(T)> m_inlineBuffer; };