NEW150235
SameSizeAs* structs wrongly assume sizeof(ptr)==sizeof(std::unique_ptr)
https://bugs.webkit.org/show_bug.cgi?id=150235
Summary SameSizeAs* structs wrongly assume sizeof(ptr)==sizeof(std::unique_ptr)
R. Sharma
Reported 2015-10-16 09:54:23 PDT
Hi, In regard to all the static assertions, to check the sizes of the data-structures using SameSizeAs* structs, it is wrongly assumed, that sizeof (std::unique_ptr) is same as sizeof (pointer) for all compilers. Therefore, I would suggest to list them separately while computing the sizes. To give an example: In WebCore\dom\ElementRareData.cpp The structure should look like: struct SameSizeAsElementRareData : NodeRareData { short indices[2]; unsigned bitfields; RegionOversetState regionOversetState; LayoutSize sizeForResizing; IntSize scrollOffset; // CHANGE BEGINS HERE . Earlier it was :void* pointers[7]; void* pointers[4]; std::unique_ptr<DatasetDOMStringMap> pointer2; std::unique_ptr<ClassList> pointer3; std::unique_ptr<NamedNodeMap> pointer4; // CHANGE ENDS HERE }; Making the above change, works perfectly for us without throwing any compile-time assert at: static_assert(sizeof(ElementRareData) == sizeof(SameSizeAsElementRareData), "ElementRareData should stay small"); Thanks, Rupali
Attachments
Anders Carlsson
Comment 1 2015-10-19 11:00:19 PDT
On which platform is the size of a unique_ptr not the same as the size as a raw pointer?
R. Sharma
Comment 2 2015-10-22 15:27:16 PDT
Hi Anders, We have our first party platform which uses its own fork of Clang where the sizes are different.
Note You need to log in before you can comment on or make changes to this bug.