Browse Source

GCC 4.4: fixed some strict-aliasing warnings.

Vladimír Vondruš 14 years ago
parent
commit
f449ba9696
  1. 3
      src/MeshTools/Clean.h
  2. 3
      src/ResourceManager.h

3
src/MeshTools/Clean.h

@ -105,7 +105,8 @@ template<class Vertex, std::size_t vertexSize = Vertex::Size> class Clean {
class IndexHash { class IndexHash {
public: public:
inline std::size_t operator()(const Math::Vector<vertexSize, std::size_t>& data) const { inline std::size_t operator()(const Math::Vector<vertexSize, std::size_t>& data) const {
return *reinterpret_cast<const std::size_t*>(Corrade::Utility::MurmurHash2()(reinterpret_cast<const char*>(&data), sizeof(data)).byteArray()); /* GCC 4.4 thinks reinterpret_cast will break strict aliasing, doing it with bit cast instead */
return Corrade::Utility::bitCast<std::size_t>(Corrade::Utility::MurmurHash2()(reinterpret_cast<const char*>(&data), sizeof(data)));
} }
}; };

3
src/ResourceManager.h

@ -116,7 +116,8 @@ template<class T, class U> class Resource;
namespace Implementation { namespace Implementation {
struct ResourceKeyHash { struct ResourceKeyHash {
inline std::size_t operator()(ResourceKey key) const { inline std::size_t operator()(ResourceKey key) const {
return *reinterpret_cast<const std::size_t*>(key.byteArray()); /* GCC 4.4 thinks reinterpret_cast will break strict aliasing, doing it with bit cast instead */
return Corrade::Utility::bitCast<std::size_t>(key);
} }
}; };

Loading…
Cancel
Save