[4.12.0] -Dvulkan=enabled build fails -Werror=int-conversion (Clang >= 15 default) on 32-bit architectures
Regressed by llvm@7068aa98412a since 684a015c (first bad). Related to VK_USE_64_BIT_PTR_DEFINES
in Vulkan-Headers. From error log:
$ pkg install llvm16
$ export CC=clang16 CXX=clang++16 CFLAGS=-m32
$ meson setup -Dvulkan=enabled /tmp/gtk_build
$ meson compile --ninja-args=-k0 -C /tmp/gtk_build
[...]
../gtk/gdk/gdkvulkancontext.c:1158:3: error: incompatible pointer to integer conversion returning 'void *' from a function with result type 'VkPipelineCache' (aka 'unsigned long long') [-Wint-conversion]
g_return_val_if_fail (GDK_IS_VULKAN_CONTEXT (self), NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/glib-2.0/glib/gmessages.h:660:16: note: expanded from macro 'g_return_val_if_fail'
return (val); \
^~~~~
../gtk/gdk/gdkvulkancontext.c:1653:30: error: incompatible pointer to integer conversion passing 'gpointer' (aka 'void *') to parameter of type 'VkShaderModule' (aka 'unsigned long long') [-Wint-conversion]
value,
^~~~~
/usr/include/vulkan/vulkan_core.h:4410:49: note: passing argument to parameter 'shaderModule' here
VkShaderModule shaderModule,
^
../gtk/gdk/gdkvulkancontext.c:1693:10: error: incompatible pointer to integer conversion assigning to 'VkShaderModule' (aka 'unsigned long long') from 'gpointer' (aka 'void *') [-Wint-conversion]
shader = g_hash_table_lookup (self->vk_shader_modules, resource_name);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../gtk/gdk/gdkvulkancontext.c:1714:79: error: incompatible integer to pointer conversion passing 'VkShaderModule' (aka 'unsigned long long') to parameter of type 'gpointer' (aka 'void *') [-Wint-conversion]
g_hash_table_insert (self->vk_shader_modules, g_strdup (resource_name), shader);
^~~~~~
/usr/include/glib-2.0/glib/ghash.h:74:61: note: passing argument to parameter 'value' here
gpointer value);
^
../gtk/gsk/vulkan/gskvulkanrender.c:538:12: error: incompatible pointer to integer conversion assigning to 'VkPipeline' (aka 'unsigned long long') from 'gpointer' (aka 'void *') [-Wint-conversion]
pipeline = g_hash_table_lookup (self->pipeline_cache, &cache_key);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../gtk/gsk/vulkan/gskvulkanrender.c:633:96: error: incompatible integer to pointer conversion passing 'VkPipeline' (aka 'unsigned long long') to parameter of type 'gpointer' (aka 'void *') [-Wint-conversion]
g_hash_table_insert (self->pipeline_cache, g_memdup (&cache_key, sizeof (PipelineCacheKey)), pipeline);
^~~~~~~~
/usr/include/glib-2.0/glib/ghash.h:74:61: note: passing argument to parameter 'value' here
gpointer value);
^
../gtk/gsk/vulkan/gskvulkanrender.c:653:15: error: incompatible pointer to integer conversion assigning to 'VkRenderPass' (aka 'unsigned long long') from 'gpointer' (aka 'void *') [-Wint-conversion]
render_pass = g_hash_table_lookup (self->render_pass_cache, &cache_key);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../gtk/gsk/vulkan/gskvulkanrender.c:697:101: error: incompatible integer to pointer conversion passing 'VkRenderPass' (aka 'unsigned long long') to parameter of type 'gpointer' (aka 'void *') [-Wint-conversion]
g_hash_table_insert (self->render_pass_cache, g_memdup (&cache_key, sizeof (RenderPassCacheKey)), render_pass);
^~~~~~~~~~~
/usr/include/glib-2.0/glib/ghash.h:74:61: note: passing argument to parameter 'value' here
gpointer value);
^
../gtk/gsk/vulkan/gskvulkanrender.c:1016:34: error: incompatible pointer to integer conversion passing 'gpointer' (aka 'void *') to parameter of type 'VkPipeline' (aka 'unsigned long long') [-Wint-conversion]
vkDestroyPipeline (device, value, NULL);
^~~~~
/usr/include/vulkan/vulkan_core.h:4454:49: note: passing argument to parameter 'pipeline' here
VkPipeline pipeline,
^
../gtk/gsk/vulkan/gskvulkanrender.c:1024:36: error: incompatible pointer to integer conversion passing 'gpointer' (aka 'void *') to parameter of type 'VkRenderPass' (aka 'unsigned long long') [-Wint-conversion]
vkDestroyRenderPass (device, value, NULL);
^~~~~
/usr/include/vulkan/vulkan_core.h:4543:49: note: passing argument to parameter 'renderPass' here
VkRenderPass renderPass,
^