diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog index 61fb45763a5b..ccc6a4f61394 100644 --- a/Source/WebKit/ChangeLog +++ b/Source/WebKit/ChangeLog @@ -1,3 +1,21 @@ +2017-10-16 Adrian Perez de Castro + + [WPE] Build failure due to invalid cast of EGLNativeWindowType when targetting 64-bit ARM + https://bugs.webkit.org/show_bug.cgi?id=178090 + + Reviewed by Michael Catanzaro. + + EGLNativeWindowType can be aliased to a different type depending (at least) on the EGL + implementation, its build options, and the libepoxy build options. Using "static_cast" + works when it is a numeric value and the width of the value needs to be optionally + extended to 64 bits (e.g. the EGL type is "int" in a 32-bit CPU) but not for pointers, + and using "reinterpret_cast" works when the size of a pointer is 64 bits but not in other + cases. Therefore it seems reasonable to use a plain C cast expression to solve this + particular situation. + + * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp: + (WebKit::AcceleratedSurfaceWPE::window const): Use a good old plain C cast expression. + 2017-10-10 Adrian Perez de Castro [WPE] Remove the possibility of installing the old WebKit2 C API diff --git a/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp b/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp index cbe88dd5a873..f0e6521a5f10 100644 --- a/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp +++ b/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp @@ -75,7 +75,12 @@ void AcceleratedSurfaceWPE::finalize() uint64_t AcceleratedSurfaceWPE::window() const { ASSERT(m_backend); - return reinterpret_cast(wpe_renderer_backend_egl_target_get_native_window(m_backend)); + // EGLNativeWindowType changes depending on the EGL implementation: reinterpret_cast works + // for pointers (only if they are 64-bit wide and not for other cases), and static_cast for + // numeric types (and when needed they get extended to 64-bit) but not for pointers. Using + // a plain C cast expression in this one instance works in all cases. + static_assert(sizeof(EGLNativeWindowType) <= sizeof(uint64_t), "EGLNativeWindowType must not be longer than 64 bits."); + return (uint64_t) wpe_renderer_backend_egl_target_get_native_window(m_backend); } uint64_t AcceleratedSurfaceWPE::surfaceID() const