From fc89f065e945b359e7c384a962640a233404d5cc Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Wed, 12 Sep 2018 10:34:54 +0200 Subject: [PATCH] Fix compiler warning emitted from GCC8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the following warning gets emitted: ``` In file included from ./Vulkan/glslang/SPIRV/hex_float.h:39, from ./Vulkan/glslang/SPIRV/SpvBuilder.cpp:49: ./Vulkan/glslang/SPIRV/bitutils.h: In instantiation of ‘Dest spvutils::BitwiseCast(Src) [with Dest = spvutils::Float16; Src = short unsigned int]’: ./Vulkan/glslang/SPIRV/hex_float.h:138:47: required from ‘T spvutils::FloatProxy::getAsFloat() const [with T = spvutils::Float16]’ ./Vulkan/glslang/SPIRV/hex_float.h:821:52: required from here ./Vulkan/glslang/SPIRV/bitutils.h:29:14: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of non-trivially copyable type ‘class spvutils::Float16’; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&dest, &source, sizeof(dest)); ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from ./Vulkan/glslang/SPIRV/SpvBuilder.cpp:49: ./Vulkan/glslang/SPIRV/hex_float.h:43:7: note: ‘class spvutils::Float16’ declared here class Float16 { ^~~~~~~ In file included from ./Vulkan/glslang/SPIRV/hex_float.h:39, from ./Vulkan/glslang/SPIRV/SpvBuilder.cpp:49: ./Vulkan/glslang/SPIRV/bitutils.h: In instantiation of ‘Dest spvutils::BitwiseCast(Src) [with Dest = spvutils::FloatProxy; Src = short unsigned int]’: ./Vulkan/glslang/SPIRV/hex_float.h:431:28: required from ‘void spvutils::HexFloat::setFromSignUnbiasedExponentAndNormalizedSignificand(bool, spvutils::HexFloat::int_type, spvutils::HexFloat::uint_type, bool) [with T = spvutils::FloatProxy; Traits = spvutils::HexFloatTraits >; spvutils::HexFloat::int_type = short int; spvutils::HexFloat::uint_type = short unsigned int]’ ./Vulkan/glslang/SPIRV/hex_float.h:633:5: required from ‘void spvutils::HexFloat::castTo(other_T&, spvutils::round_direction) [with other_T = spvutils::HexFloat, spvutils::HexFloatTraits > >; T = spvutils::FloatProxy; Traits = spvutils::HexFloatTraits >]’ ./Vulkan/glslang/SPIRV/hex_float.h:817:39: required from here ./Vulkan/glslang/SPIRV/bitutils.h:29:14: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘class spvutils::FloatProxy’ from an array of ‘short unsigned int’ [-Wclass-memaccess] std::memcpy(&dest, &source, sizeof(dest)); ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from ./Vulkan/glslang/SPIRV/SpvBuilder.cpp:49: ./Vulkan/glslang/SPIRV/hex_float.h:115:7: note: ‘class spvutils::FloatProxy’ declared here class FloatProxy { ^~~~~~~~~~ ``` --- SPIRV/bitutils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SPIRV/bitutils.h b/SPIRV/bitutils.h index 31288ab6..22e44cec 100644 --- a/SPIRV/bitutils.h +++ b/SPIRV/bitutils.h @@ -26,7 +26,7 @@ Dest BitwiseCast(Src source) { Dest dest; static_assert(sizeof(source) == sizeof(dest), "BitwiseCast: Source and destination must have the same size"); - std::memcpy(&dest, &source, sizeof(dest)); + std::memcpy(static_cast(&dest), &source, sizeof(dest)); return dest; }