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
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 | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Anders Carlsson
On which platform is the size of a unique_ptr not the same as the size as a raw pointer?
R. Sharma
Hi Anders,
We have our first party platform which uses its own fork of Clang where the sizes are different.