From b69356cadb3b74b630bd20ce13f8fc9d25489704 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sat, 21 Jun 2014 07:41:30 -0400 Subject: [PATCH] Resolve aliasing issues #152, #212 --- glm/gtc/packing.inl | 20 +++++++++++++++++--- readme.txt | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/glm/gtc/packing.inl b/glm/gtc/packing.inl index 353dc6ebf..571d0f4df 100644 --- a/glm/gtc/packing.inl +++ b/glm/gtc/packing.inl @@ -170,6 +170,7 @@ namespace detail # if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & GLM_COMPILER_CLANG) float Temp = 0; memcpy(&Temp, &Result, sizeof(Temp)); + return Temp; # else return reinterpret_cast(Result); # endif @@ -184,7 +185,13 @@ namespace detail else if(glm::isinf(x)) return 0x1f << 5; - uint Pack = reinterpret_cast(x); +# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & GLM_COMPILER_CLANG) + uint Pack = 0; + memcpy(&Pack, &x, sizeof(Pack)); +# else + uint Pack = reinterpret_cast(x); +# endif + return float2packed10(Pack); } @@ -197,8 +204,15 @@ namespace detail else if(x == (0x1f << 5)) return ~0;//Inf - uint result = packed10ToFloat(x); - return reinterpret_cast(result); + uint Result = packed10ToFloat(x); + +# if(GLM_COMPILER & GLM_COMPILER_GCC || GLM_COMPILER & GLM_COMPILER_CLANG) + float Temp = 0; + memcpy(&Temp, &Result, sizeof(Temp)); + return Temp; +# else + return reinterpret_cast(Result); +# endif } // GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z) diff --git a/readme.txt b/readme.txt index 2dd3fbc76..dadd4c235 100644 --- a/readme.txt +++ b/readme.txt @@ -54,6 +54,7 @@ GLM 0.9.5.4: 2014-0X-XX - Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to tweakedInfinitePerspective - Fixed std::copy and std::vector with GLM types #214 +- Fixed aliasing issues #212, #152 ================================================================================ GLM 0.9.5.3: 2014-04-02