Bug 150235

Summary: SameSizeAs* structs wrongly assume sizeof(ptr)==sizeof(std::unique_ptr)
Product: WebKit Reporter: R. Sharma <rupsharma>
Component: WebCore Misc.Assignee: Nobody <webkit-unassigned>
Status: NEW    
Severity: Normal CC: andersca
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   

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.