WKObject's minimum object alignment needs to be larger
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Jul 2019 21:49:21 +0000 (21:49 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Jul 2019 21:49:21 +0000 (21:49 +0000)
https://bugs.webkit.org/show_bug.cgi?id=199523

Patch by Saagar Jha <saagarjha@apple.com> on 2019-07-09
Reviewed by Alex Christensen.

WKObject's wrapped objects are currently constructed at addresses aligned to 8-byte boundaries, but some
classes have more stringent requirements. By querying std::aligned_storage for the alignment of an object
larger than anything we can construct, we should be able to satisfy alignment for any of WebKit's types.

* Shared/Cocoa/APIObject.mm: Use std::aligned_storage in conjunction with alignof to determine
minimumObjectAlignment, instead of hardcoding 8.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@247281 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/Shared/Cocoa/APIObject.mm

index 6d4f1e4..732d11f 100644 (file)
@@ -1,3 +1,17 @@
+2019-07-09  Saagar Jha  <saagarjha@apple.com>
+
+        WKObject's minimum object alignment needs to be larger
+        https://bugs.webkit.org/show_bug.cgi?id=199523
+
+        Reviewed by Alex Christensen.
+
+        WKObject's wrapped objects are currently constructed at addresses aligned to 8-byte boundaries, but some
+        classes have more stringent requirements. By querying std::aligned_storage for the alignment of an object
+        larger than anything we can construct, we should be able to satisfy alignment for any of WebKit's types.
+
+        * Shared/Cocoa/APIObject.mm: Use std::aligned_storage in conjunction with alignof to determine
+        minimumObjectAlignment, instead of hardcoding 8.
+
 2019-07-09  Megan Gardner  <megan_gardner@apple.com>
 
         Don't strip out spaces for personalized Autocorrections
index d017e6f..57c32b2 100644 (file)
@@ -90,7 +90,7 @@
 #import "_WKApplicationManifestInternal.h"
 #endif
 
-static const size_t minimumObjectAlignment = 8;
+static const size_t minimumObjectAlignment = alignof(std::aligned_storage<std::numeric_limits<size_t>::max()>::type);
 static_assert(minimumObjectAlignment >= alignof(void*), "Objects should always be at least pointer-aligned.");
 static const size_t maximumExtraSpaceForAlignment = minimumObjectAlignment - alignof(void*);