From ab5eb71025fcf076b9454dec42138b7eadb938b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20S=C3=BC=C3=9Fenbach?= Date: Thu, 31 Oct 2024 08:24:05 +0100 Subject: [PATCH] Use compile option -fno-strict-aliasing to prevent breaking optimizations due to using reinterpret_cast (#1985) --- CMakeLists.txt | 3 +++ README.md | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c5ec65e..2ed1888 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,9 @@ function( vulkan_hpp__setup_platform ) else() message( FATAL_ERROR, "Vulkan-Hpp: unhandled platform!" ) endif() + if( !MSVC ) + target_compile_options( ${TARGET_NAME} PRIVATE -fno-strict-aliasing ) + endif() endfunction() function( vulkan_hpp__setup_vulkan_include ) diff --git a/README.md b/README.md index d197063..efd10ac 100644 --- a/README.md +++ b/README.md @@ -846,6 +846,10 @@ Currently, there are just a couple of such defines: - `VULKAN_HPP_NO_TO_STRING`, which removes the various `vk::to_string` functions on enums and bitmasks. - `VULKAN_HPP_USE_REFLECT`, this one needs to be defined to use the reflection function on structures. It's very slow to compile, though! +### Strict aliasing issue + +As Vulkan-Hpp often needs to switch between C++ vk-types and corresponding bit-identical C-types, using `reinterpret_cast`, it is highly recommended to use the compile option `-fno-strict-aliasing` to prevent potentially breaking compile optimizations. + ## Configuration Options There are a couple of defines you can use to control the feature set and behaviour of `vulkan.hpp`: