From ec5e34e04f4c054dbc616e4fe2a499747efbad18 Mon Sep 17 00:00:00 2001 From: Aaron Date: Sun, 11 Sep 2016 21:55:22 -0700 Subject: [PATCH 1/7] Fixed some msvc warnings. Tested on msvc 2015 update 3. --- glm/detail/func_integer.inl | 7 +++++++ glm/detail/type_vec.hpp | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index 25910eb0..accc58d9 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -317,6 +317,10 @@ namespace detail template class vecType> GLM_FUNC_QUALIFIER vecType bitCount(vecType const & v) { + #ifdef GLM_COMPILER_VC + #pragma warning(push) + #pragma warning(disable : 4310) //cast truncates constant value + #endif vecType::type, P> x(*reinterpret_cast::type, P> const *>(&v)); x = detail::compute_bitfieldBitCountStep::type, P, vecType, detail::is_aligned

::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned::type(0x5555555555555555ull), typename detail::make_unsigned::type( 1)); x = detail::compute_bitfieldBitCountStep::type, P, vecType, detail::is_aligned

::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned::type(0x3333333333333333ull), typename detail::make_unsigned::type( 2)); @@ -325,6 +329,9 @@ namespace detail x = detail::compute_bitfieldBitCountStep::type, P, vecType, detail::is_aligned

::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned::type(16)); x = detail::compute_bitfieldBitCountStep::type, P, vecType, detail::is_aligned

::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned::type(0x00000000FFFFFFFFull), typename detail::make_unsigned::type(32)); return vecType(x); + #ifdef GLM_COMPILER_VC + #pragma warning(pop) + #endif } // findLSB diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index 23e463e7..686a9b50 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -9,6 +9,10 @@ namespace glm{ namespace detail { +#ifdef GLM_COMPILER_VC +#pragma warning(push) +#pragma warning(disable : 4324) // structure was padded due to alignment specifier +#endif template struct aligned {}; template<> GLM_ALIGNED_STRUCT(1) aligned<1>{}; template<> GLM_ALIGNED_STRUCT(2) aligned<2>{}; @@ -17,7 +21,9 @@ namespace detail template<> GLM_ALIGNED_STRUCT(16) aligned<16>{}; template<> GLM_ALIGNED_STRUCT(32) aligned<32>{}; template<> GLM_ALIGNED_STRUCT(64) aligned<64>{}; - +#ifdef GLM_COMPILER_VC +#pragma warning(pop) +#endif template struct storage { From 460b6ba1b6334890196ddf6cd8446840a08e5c5e Mon Sep 17 00:00:00 2001 From: Aaron Date: Mon, 12 Sep 2016 10:55:01 -0700 Subject: [PATCH 2/7] Corrected test for msvc compiler --- glm/detail/func_integer.inl | 4 ++-- glm/detail/type_vec.hpp | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index accc58d9..47be412a 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -317,7 +317,7 @@ namespace detail template class vecType> GLM_FUNC_QUALIFIER vecType bitCount(vecType const & v) { - #ifdef GLM_COMPILER_VC + #if GLM_COMPILER & GLM_COMPILER_VC #pragma warning(push) #pragma warning(disable : 4310) //cast truncates constant value #endif @@ -329,7 +329,7 @@ namespace detail x = detail::compute_bitfieldBitCountStep::type, P, vecType, detail::is_aligned

::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned::type(16)); x = detail::compute_bitfieldBitCountStep::type, P, vecType, detail::is_aligned

::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned::type(0x00000000FFFFFFFFull), typename detail::make_unsigned::type(32)); return vecType(x); - #ifdef GLM_COMPILER_VC + #if GLM_COMPILER & GLM_COMPILER_VC #pragma warning(pop) #endif } diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index 686a9b50..9d066550 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -9,7 +9,7 @@ namespace glm{ namespace detail { -#ifdef GLM_COMPILER_VC +#if GLM_COMPILER & GLM_COMPILER_VC #pragma warning(push) #pragma warning(disable : 4324) // structure was padded due to alignment specifier #endif @@ -21,9 +21,10 @@ namespace detail template<> GLM_ALIGNED_STRUCT(16) aligned<16>{}; template<> GLM_ALIGNED_STRUCT(32) aligned<32>{}; template<> GLM_ALIGNED_STRUCT(64) aligned<64>{}; -#ifdef GLM_COMPILER_VC +#if GLM_COMPILER & GLM_COMPILER_VC #pragma warning(pop) #endif + template struct storage { From e57615b6bb3efdaa5704e4acf6c6cdd7868f1154 Mon Sep 17 00:00:00 2001 From: Aaron Date: Tue, 13 Sep 2016 00:36:43 -0700 Subject: [PATCH 3/7] Changed how storage alignment is created to eliminate warnings on msvc. --- glm/detail/type_vec.hpp | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index 9d066550..af8ed14a 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -9,22 +9,6 @@ namespace glm{ namespace detail { -#if GLM_COMPILER & GLM_COMPILER_VC -#pragma warning(push) -#pragma warning(disable : 4324) // structure was padded due to alignment specifier -#endif - template struct aligned {}; - template<> GLM_ALIGNED_STRUCT(1) aligned<1>{}; - template<> GLM_ALIGNED_STRUCT(2) aligned<2>{}; - template<> GLM_ALIGNED_STRUCT(4) aligned<4>{}; - template<> GLM_ALIGNED_STRUCT(8) aligned<8>{}; - template<> GLM_ALIGNED_STRUCT(16) aligned<16>{}; - template<> GLM_ALIGNED_STRUCT(32) aligned<32>{}; - template<> GLM_ALIGNED_STRUCT(64) aligned<64>{}; -#if GLM_COMPILER & GLM_COMPILER_VC -#pragma warning(pop) -#endif - template struct storage { @@ -33,15 +17,22 @@ namespace detail } type; }; - template - struct storage - { - struct type : aligned - { - uint8 data[size]; + #define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \ + template \ + struct storage { \ + GLM_ALIGNED_STRUCT(x) type { \ + uint8_t data[x]; \ + }; \ }; - }; + GLM_ALIGNED_STORAGE_TYPE_STRUCT(1) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(2) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(4) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(8) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(16) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(32) + GLM_ALIGNED_STORAGE_TYPE_STRUCT(64) + # if GLM_ARCH & GLM_ARCH_SSE2_BIT template <> struct storage From fa51f18b0c874f462b627fa9f7eebaffb4cd456e Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 14 Sep 2016 22:01:30 +0200 Subject: [PATCH 4/7] Fixed GCC build broken by #548 PR --- glm/detail/type_vec.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glm/detail/type_vec.hpp b/glm/detail/type_vec.hpp index af8ed14a..7849db63 100644 --- a/glm/detail/type_vec.hpp +++ b/glm/detail/type_vec.hpp @@ -21,7 +21,7 @@ namespace detail template \ struct storage { \ GLM_ALIGNED_STRUCT(x) type { \ - uint8_t data[x]; \ + uint8 data[x]; \ }; \ }; From e2ae466059020363914b8505fd558a207285cdba Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 14 Sep 2016 22:33:59 +0200 Subject: [PATCH 5/7] Added aligned storage tests #548 --- test/core/CMakeLists.txt | 1 + test/core/core_type_aligned.cpp | 104 ++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 test/core/core_type_aligned.cpp diff --git a/test/core/CMakeLists.txt b/test/core/CMakeLists.txt index f83823d6..c2349c49 100644 --- a/test/core/CMakeLists.txt +++ b/test/core/CMakeLists.txt @@ -1,3 +1,4 @@ +glmCreateTestGTC(core_type_aligned) glmCreateTestGTC(core_type_cast) glmCreateTestGTC(core_type_ctor) glmCreateTestGTC(core_type_float) diff --git a/test/core/core_type_aligned.cpp b/test/core/core_type_aligned.cpp new file mode 100644 index 00000000..45f59688 --- /dev/null +++ b/test/core/core_type_aligned.cpp @@ -0,0 +1,104 @@ +#include +/* +#define GLM_ALIGNED(x) __declspec(align(x)) +#define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) + +#define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \ +template \ +struct storage { \ + GLM_ALIGNED_STRUCT(x) type { \ + uint8_t data[x]; \ + }; \ +}; + +template +struct storage { + typedef struct type { + uint8_t data[size]; + } type; +}; + +GLM_ALIGNED_STORAGE_TYPE_STRUCT(1) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(2) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(4) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(8) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(16) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(32) +GLM_ALIGNED_STORAGE_TYPE_STRUCT(64) +*/ +int main() { + size_t size1_aligned = sizeof(glm::detail::storage::type); + size_t size2_aligned = sizeof(glm::detail::storage::type); + size_t size4_aligned = sizeof(glm::detail::storage::type); + size_t size8_aligned = sizeof(glm::detail::storage::type); + size_t size16_aligned = sizeof(glm::detail::storage::type); + size_t size32_aligned = sizeof(glm::detail::storage::type); + size_t size64_aligned = sizeof(glm::detail::storage::type); + size_t size128_aligned = sizeof(glm::detail::storage::type); + + size_t size1_unaligned = sizeof(glm::detail::storage::type); + size_t size2_unaligned = sizeof(glm::detail::storage::type); + size_t size4_unaligned = sizeof(glm::detail::storage::type); + size_t size8_unaligned = sizeof(glm::detail::storage::type); + size_t size16_unaligned = sizeof(glm::detail::storage::type); + size_t size32_unaligned = sizeof(glm::detail::storage::type); + size_t size64_unaligned = sizeof(glm::detail::storage::type); + size_t size128_unaligned = sizeof(glm::detail::storage::type); + + size_t align1_aligned = alignof(glm::detail::storage::type); + size_t align2_aligned = alignof(glm::detail::storage::type); + size_t align4_aligned = alignof(glm::detail::storage::type); + size_t align8_aligned = alignof(glm::detail::storage::type); + size_t align16_aligned = alignof(glm::detail::storage::type); + size_t align32_aligned = alignof(glm::detail::storage::type); + size_t align64_aligned = alignof(glm::detail::storage::type); + size_t align128_aligned = alignof(glm::detail::storage::type); + + size_t align1_unaligned = alignof(glm::detail::storage::type); + size_t align2_unaligned = alignof(glm::detail::storage::type); + size_t align4_unaligned = alignof(glm::detail::storage::type); + size_t align8_unaligned = alignof(glm::detail::storage::type); + size_t align16_unaligned = alignof(glm::detail::storage::type); + size_t align32_unaligned = alignof(glm::detail::storage::type); + size_t align64_unaligned = alignof(glm::detail::storage::type); + size_t align128_unaligned = alignof(glm::detail::storage::type); + + // RESULTS + // size1_aligned 1 + // size2_aligned 2 + // size4_aligned 4 + // size8_aligned 8 + // size16_aligned 16 + // size32_aligned 32 + // size64_aligned 64 + // size128_aligned 128 + // + // size1_unaligned 1 + // size2_unaligned 2 + // size4_unaligned 4 + // size8_unaligned 8 + // size16_unaligned 16 + // size32_unaligned 32 + // size64_unaligned 64 + // size128_unaligned 128 + // + // align1_aligned 1 + // align2_aligned 2 + // align4_aligned 4 + // align8_aligned 8 + // align16_aligned 16 + // align32_aligned 32 + // align64_aligned 64 + // align128_aligned 1 + // + // align1_unaligned 1 + // align2_unaligned 1 + // align4_unaligned 1 + // align8_unaligned 1 + // align16_unaligned 1 + // align32_unaligned 1 + // align64_unaligned 1 + // align128_unaligned 1 + + return 0; +} From 39455067dca8e29036ae34d6f24994f8a6d00096 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 14 Sep 2016 23:18:52 +0200 Subject: [PATCH 6/7] Improved core_type_aligned test --- test/core/core_type_aligned.cpp | 196 +++++++++++++++----------------- 1 file changed, 94 insertions(+), 102 deletions(-) diff --git a/test/core/core_type_aligned.cpp b/test/core/core_type_aligned.cpp index 45f59688..be15e9d8 100644 --- a/test/core/core_type_aligned.cpp +++ b/test/core/core_type_aligned.cpp @@ -1,104 +1,96 @@ #include -/* -#define GLM_ALIGNED(x) __declspec(align(x)) -#define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x)) - -#define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \ -template \ -struct storage { \ - GLM_ALIGNED_STRUCT(x) type { \ - uint8_t data[x]; \ - }; \ -}; - -template -struct storage { - typedef struct type { - uint8_t data[size]; - } type; -}; - -GLM_ALIGNED_STORAGE_TYPE_STRUCT(1) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(2) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(4) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(8) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(16) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(32) -GLM_ALIGNED_STORAGE_TYPE_STRUCT(64) -*/ -int main() { - size_t size1_aligned = sizeof(glm::detail::storage::type); - size_t size2_aligned = sizeof(glm::detail::storage::type); - size_t size4_aligned = sizeof(glm::detail::storage::type); - size_t size8_aligned = sizeof(glm::detail::storage::type); - size_t size16_aligned = sizeof(glm::detail::storage::type); - size_t size32_aligned = sizeof(glm::detail::storage::type); - size_t size64_aligned = sizeof(glm::detail::storage::type); - size_t size128_aligned = sizeof(glm::detail::storage::type); - - size_t size1_unaligned = sizeof(glm::detail::storage::type); - size_t size2_unaligned = sizeof(glm::detail::storage::type); - size_t size4_unaligned = sizeof(glm::detail::storage::type); - size_t size8_unaligned = sizeof(glm::detail::storage::type); - size_t size16_unaligned = sizeof(glm::detail::storage::type); - size_t size32_unaligned = sizeof(glm::detail::storage::type); - size_t size64_unaligned = sizeof(glm::detail::storage::type); - size_t size128_unaligned = sizeof(glm::detail::storage::type); - - size_t align1_aligned = alignof(glm::detail::storage::type); - size_t align2_aligned = alignof(glm::detail::storage::type); - size_t align4_aligned = alignof(glm::detail::storage::type); - size_t align8_aligned = alignof(glm::detail::storage::type); - size_t align16_aligned = alignof(glm::detail::storage::type); - size_t align32_aligned = alignof(glm::detail::storage::type); - size_t align64_aligned = alignof(glm::detail::storage::type); - size_t align128_aligned = alignof(glm::detail::storage::type); - - size_t align1_unaligned = alignof(glm::detail::storage::type); - size_t align2_unaligned = alignof(glm::detail::storage::type); - size_t align4_unaligned = alignof(glm::detail::storage::type); - size_t align8_unaligned = alignof(glm::detail::storage::type); - size_t align16_unaligned = alignof(glm::detail::storage::type); - size_t align32_unaligned = alignof(glm::detail::storage::type); - size_t align64_unaligned = alignof(glm::detail::storage::type); - size_t align128_unaligned = alignof(glm::detail::storage::type); - - // RESULTS - // size1_aligned 1 - // size2_aligned 2 - // size4_aligned 4 - // size8_aligned 8 - // size16_aligned 16 - // size32_aligned 32 - // size64_aligned 64 - // size128_aligned 128 - // - // size1_unaligned 1 - // size2_unaligned 2 - // size4_unaligned 4 - // size8_unaligned 8 - // size16_unaligned 16 - // size32_unaligned 32 - // size64_unaligned 64 - // size128_unaligned 128 - // - // align1_aligned 1 - // align2_aligned 2 - // align4_aligned 4 - // align8_aligned 8 - // align16_aligned 16 - // align32_aligned 32 - // align64_aligned 64 - // align128_aligned 1 - // - // align1_unaligned 1 - // align2_unaligned 1 - // align4_unaligned 1 - // align8_unaligned 1 - // align16_unaligned 1 - // align32_unaligned 1 - // align64_unaligned 1 - // align128_unaligned 1 - - return 0; + +int test_aligned() +{ + int Error = 0; + + size_t size1_aligned = sizeof(glm::detail::storage::type); + Error += size1_aligned == 1 ? 0 : 1; + size_t align1_aligned = alignof(glm::detail::storage::type); + Error += align1_aligned == 1 ? 0 : 1; + + size_t size2_aligned = sizeof(glm::detail::storage::type); + Error += size2_aligned == 2 ? 0 : 1; + size_t align2_aligned = alignof(glm::detail::storage::type); + Error += align2_aligned == 2 ? 0 : 1; + + size_t size4_aligned = sizeof(glm::detail::storage::type); + Error += size4_aligned == 4 ? 0 : 1; + size_t align4_aligned = alignof(glm::detail::storage::type); + Error += align4_aligned == 4 ? 0 : 1; + + size_t size8_aligned = sizeof(glm::detail::storage::type); + Error += size8_aligned == 8 ? 0 : 1; + size_t align8_aligned = alignof(glm::detail::storage::type); + Error += align8_aligned == 8 ? 0 : 1; + + size_t size16_aligned = sizeof(glm::detail::storage::type); + Error += size16_aligned == 16 ? 0 : 1; + size_t align16_aligned = alignof(glm::detail::storage::type); + Error += align16_aligned == 16 ? 0 : 1; + + size_t size32_aligned = sizeof(glm::detail::storage::type); + Error += size32_aligned == 32 ? 0 : 1; + size_t align32_aligned = alignof(glm::detail::storage::type); + Error += align32_aligned == 32 ? 0 : 1; + + size_t size64_aligned = sizeof(glm::detail::storage::type); + Error += size64_aligned == 64 ? 0 : 1; + size_t align64_aligned = alignof(glm::detail::storage::type); + Error += align64_aligned == 64 ? 0 : 1; + + return Error; +} + +int test_unaligned() +{ + int Error = 0; + + size_t size1_unaligned = sizeof(glm::detail::storage::type); + Error += size1_unaligned == 1 ? 0 : 1; + size_t align1_unaligned = alignof(glm::detail::storage::type); + Error += align1_unaligned == 1 ? 0 : 1; + + size_t size2_unaligned = sizeof(glm::detail::storage::type); + Error += size2_unaligned == 2 ? 0 : 1; + size_t align2_unaligned = alignof(glm::detail::storage::type); + Error += align2_unaligned == 1 ? 0 : 1; + + size_t size4_unaligned = sizeof(glm::detail::storage::type); + Error += size4_unaligned == 4 ? 0 : 1; + size_t align4_unaligned = alignof(glm::detail::storage::type); + Error += align4_unaligned == 1 ? 0 : 1; + + size_t size8_unaligned = sizeof(glm::detail::storage::type); + Error += size8_unaligned == 8 ? 0 : 1; + size_t align8_unaligned = alignof(glm::detail::storage::type); + Error += align8_unaligned == 1 ? 0 : 1; + + size_t size16_unaligned = sizeof(glm::detail::storage::type); + Error += size16_unaligned == 16 ? 0 : 1; + size_t align16_unaligned = alignof(glm::detail::storage::type); + Error += align16_unaligned == 1 ? 0 : 1; + + size_t size32_unaligned = sizeof(glm::detail::storage::type); + Error += size32_unaligned == 32 ? 0 : 1; + size_t align32_unaligned = alignof(glm::detail::storage::type); + Error += align32_unaligned == 1 ? 0 : 1; + + size_t size64_unaligned = sizeof(glm::detail::storage::type); + Error += size64_unaligned == 64 ? 0 : 1; + size_t align64_unaligned = alignof(glm::detail::storage::type); + Error += align64_unaligned == 1 ? 0 : 1; + + return Error; +} + + +int main() +{ + int Error = 0; + + Error += test_aligned(); + Error += test_unaligned(); + + return Error; } From 89d77b51c666952faec50f996d42ecf589405a5c Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Wed, 14 Sep 2016 23:38:43 +0200 Subject: [PATCH 7/7] Alignof is a C++11 feature --- glm/detail/setup.hpp | 13 ++++++ test/core/core_type_aligned.cpp | 70 ++++++++++++++++----------------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/glm/detail/setup.hpp b/glm/detail/setup.hpp index 8ad7eb9b..51c7c1ae 100644 --- a/glm/detail/setup.hpp +++ b/glm/detail/setup.hpp @@ -418,6 +418,19 @@ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50)))) #endif +// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf +#if GLM_COMPILER & GLM_COMPILER_CLANG +# define GLM_HAS_ALIGNOF __has_feature(c_alignof) +#elif GLM_LANG & GLM_LANG_CXX11_FLAG +# define GLM_HAS_ALIGNOF 1 +#else +# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ + ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \ + ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \ + ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2015)) || \ + ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA70)))) +#endif + // #if GLM_LANG & GLM_LANG_CXX11_FLAG # define GLM_HAS_ASSIGNABLE 1 diff --git a/test/core/core_type_aligned.cpp b/test/core/core_type_aligned.cpp index be15e9d8..babf82a9 100644 --- a/test/core/core_type_aligned.cpp +++ b/test/core/core_type_aligned.cpp @@ -6,39 +6,38 @@ int test_aligned() size_t size1_aligned = sizeof(glm::detail::storage::type); Error += size1_aligned == 1 ? 0 : 1; - size_t align1_aligned = alignof(glm::detail::storage::type); - Error += align1_aligned == 1 ? 0 : 1; - size_t size2_aligned = sizeof(glm::detail::storage::type); Error += size2_aligned == 2 ? 0 : 1; - size_t align2_aligned = alignof(glm::detail::storage::type); - Error += align2_aligned == 2 ? 0 : 1; - size_t size4_aligned = sizeof(glm::detail::storage::type); Error += size4_aligned == 4 ? 0 : 1; - size_t align4_aligned = alignof(glm::detail::storage::type); - Error += align4_aligned == 4 ? 0 : 1; - size_t size8_aligned = sizeof(glm::detail::storage::type); Error += size8_aligned == 8 ? 0 : 1; - size_t align8_aligned = alignof(glm::detail::storage::type); - Error += align8_aligned == 8 ? 0 : 1; - size_t size16_aligned = sizeof(glm::detail::storage::type); Error += size16_aligned == 16 ? 0 : 1; - size_t align16_aligned = alignof(glm::detail::storage::type); - Error += align16_aligned == 16 ? 0 : 1; - size_t size32_aligned = sizeof(glm::detail::storage::type); Error += size32_aligned == 32 ? 0 : 1; - size_t align32_aligned = alignof(glm::detail::storage::type); - Error += align32_aligned == 32 ? 0 : 1; - size_t size64_aligned = sizeof(glm::detail::storage::type); Error += size64_aligned == 64 ? 0 : 1; + +# if GLM_HAS_ALIGNOF + + size_t align1_aligned = alignof(glm::detail::storage::type); + Error += align1_aligned == 1 ? 0 : 1; + size_t align2_aligned = alignof(glm::detail::storage::type); + Error += align2_aligned == 2 ? 0 : 1; + size_t align4_aligned = alignof(glm::detail::storage::type); + Error += align4_aligned == 4 ? 0 : 1; + size_t align8_aligned = alignof(glm::detail::storage::type); + Error += align8_aligned == 8 ? 0 : 1; + size_t align16_aligned = alignof(glm::detail::storage::type); + Error += align16_aligned == 16 ? 0 : 1; + size_t align32_aligned = alignof(glm::detail::storage::type); + Error += align32_aligned == 32 ? 0 : 1; size_t align64_aligned = alignof(glm::detail::storage::type); Error += align64_aligned == 64 ? 0 : 1; +# endif //GLM_HAS_ALIGNOF + return Error; } @@ -48,39 +47,38 @@ int test_unaligned() size_t size1_unaligned = sizeof(glm::detail::storage::type); Error += size1_unaligned == 1 ? 0 : 1; - size_t align1_unaligned = alignof(glm::detail::storage::type); - Error += align1_unaligned == 1 ? 0 : 1; - size_t size2_unaligned = sizeof(glm::detail::storage::type); Error += size2_unaligned == 2 ? 0 : 1; - size_t align2_unaligned = alignof(glm::detail::storage::type); - Error += align2_unaligned == 1 ? 0 : 1; - size_t size4_unaligned = sizeof(glm::detail::storage::type); Error += size4_unaligned == 4 ? 0 : 1; - size_t align4_unaligned = alignof(glm::detail::storage::type); - Error += align4_unaligned == 1 ? 0 : 1; - size_t size8_unaligned = sizeof(glm::detail::storage::type); Error += size8_unaligned == 8 ? 0 : 1; - size_t align8_unaligned = alignof(glm::detail::storage::type); - Error += align8_unaligned == 1 ? 0 : 1; - size_t size16_unaligned = sizeof(glm::detail::storage::type); Error += size16_unaligned == 16 ? 0 : 1; - size_t align16_unaligned = alignof(glm::detail::storage::type); - Error += align16_unaligned == 1 ? 0 : 1; - size_t size32_unaligned = sizeof(glm::detail::storage::type); Error += size32_unaligned == 32 ? 0 : 1; - size_t align32_unaligned = alignof(glm::detail::storage::type); - Error += align32_unaligned == 1 ? 0 : 1; - size_t size64_unaligned = sizeof(glm::detail::storage::type); Error += size64_unaligned == 64 ? 0 : 1; + +# if GLM_HAS_ALIGNOF + + size_t align1_unaligned = alignof(glm::detail::storage::type); + Error += align1_unaligned == 1 ? 0 : 1; + size_t align2_unaligned = alignof(glm::detail::storage::type); + Error += align2_unaligned == 1 ? 0 : 1; + size_t align4_unaligned = alignof(glm::detail::storage::type); + Error += align4_unaligned == 1 ? 0 : 1; + size_t align8_unaligned = alignof(glm::detail::storage::type); + Error += align8_unaligned == 1 ? 0 : 1; + size_t align16_unaligned = alignof(glm::detail::storage::type); + Error += align16_unaligned == 1 ? 0 : 1; + size_t align32_unaligned = alignof(glm::detail::storage::type); + Error += align32_unaligned == 1 ? 0 : 1; size_t align64_unaligned = alignof(glm::detail::storage::type); Error += align64_unaligned == 1 ? 0 : 1; +# endif //GLM_HAS_ALIGNOF + return Error; }