From eae3f80b63c16ec2848fb94ddf7c5c646da65170 Mon Sep 17 00:00:00 2001 From: Joel Kiptoo Date: Sat, 26 Sep 2026 16:51:55 +0300 Subject: [PATCH 1/2] Fix GCC -Wpedantic and -Wunused-but-set-variable warnings GCC reports "ISO C++ prohibits anonymous structs" for the anonymous structs in the XMFLOAT*, XMINT*, XMUINT* and PackedVector types. Clang's equivalent warnings are already suppressed by the existing "#pragma clang diagnostic" blocks, so add matching GCC blocks. The anonymous struct in XMMATRIX (_XM_NO_INTRINSICS_ only) is outside those blocks and also warns with clang, so wrap it for both compilers. In XMMatrixDecompose, only cc of the second XM3RANKDECOMPOSE is used, so mark aa and bb as unused. Fixes #342 --- Inc/DirectXMath.h | 24 ++++++++++++++++++++++++ Inc/DirectXMathMatrix.inl | 2 ++ Inc/DirectXPackedVector.h | 7 +++++++ 3 files changed, 33 insertions(+) diff --git a/Inc/DirectXMath.h b/Inc/DirectXMath.h index d9b9665..18f7cc5 100644 --- a/Inc/DirectXMath.h +++ b/Inc/DirectXMath.h @@ -617,6 +617,16 @@ namespace DirectX // Fix-up for (2nd+) XMMATRIX parameters to pass by reference typedef const XMMATRIX& CXMMATRIX; +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgnu-anonymous-struct" +#pragma clang diagnostic ignored "-Wnested-anon-types" +#endif +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + #ifdef _XM_NO_INTRINSICS_ struct XMMATRIX #else @@ -713,6 +723,13 @@ namespace DirectX friend XMMATRIX XM_CALLCONV operator*(float S, FXMMATRIX M) noexcept; }; +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic pop +#endif +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + //------------------------------------------------------------------------------ // 2D Vector; 32 bit floating point components struct XMFLOAT2 @@ -1031,6 +1048,10 @@ namespace DirectX #pragma clang diagnostic ignored "-Wnested-anon-types" #pragma clang diagnostic ignored "-Wunknown-warning-option" #pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" #endif //------------------------------------------------------------------------------ @@ -1410,6 +1431,9 @@ namespace DirectX //////////////////////////////////////////////////////////////////////////////// +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic pop +#endif #ifdef __clang__ #pragma clang diagnostic pop #endif diff --git a/Inc/DirectXMathMatrix.inl b/Inc/DirectXMathMatrix.inl index d0f8e11..4148497 100644 --- a/Inc/DirectXMathMatrix.inl +++ b/Inc/DirectXMathMatrix.inl @@ -1137,6 +1137,8 @@ _Use_decl_annotations_ inline bool fAbsZ = fabsf(XMVectorGetZ(ppvBasis[a][0])); XM3RANKDECOMPOSE(aa, bb, cc, fAbsX, fAbsY, fAbsZ) + (void)aa; + (void)bb; ppvBasis[b][0] = XMVector3Cross(ppvBasis[a][0], pvCanonicalBasis[cc][0]); } diff --git a/Inc/DirectXPackedVector.h b/Inc/DirectXPackedVector.h index c849bf7..6491e91 100644 --- a/Inc/DirectXPackedVector.h +++ b/Inc/DirectXPackedVector.h @@ -29,6 +29,10 @@ namespace DirectX #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu-anonymous-struct" #pragma clang diagnostic ignored "-Wnested-anon-types" +#endif +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" #endif //------------------------------------------------------------------------------ @@ -1398,6 +1402,9 @@ namespace DirectX } }; +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic pop +#endif #ifdef __clang__ #pragma clang diagnostic pop #endif From 09fc38d933d453e8d2d35572d393ba5458cb466c Mon Sep 17 00:00:00 2001 From: Joel Kiptoo Date: Sun, 27 Sep 2026 06:34:52 +0300 Subject: [PATCH 2/2] Use #elif defined(__GNUC__) for the GCC diagnostic blocks --- Inc/DirectXMath.h | 16 ++++++---------- Inc/DirectXPackedVector.h | 8 +++----- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/Inc/DirectXMath.h b/Inc/DirectXMath.h index 18f7cc5..053f4f4 100644 --- a/Inc/DirectXMath.h +++ b/Inc/DirectXMath.h @@ -621,8 +621,7 @@ namespace DirectX #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu-anonymous-struct" #pragma clang diagnostic ignored "-Wnested-anon-types" -#endif -#if defined(__GNUC__) && !defined(__clang__) +#elif defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #endif @@ -723,11 +722,10 @@ namespace DirectX friend XMMATRIX XM_CALLCONV operator*(float S, FXMMATRIX M) noexcept; }; -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif #ifdef __clang__ #pragma clang diagnostic pop +#elif defined(__GNUC__) +#pragma GCC diagnostic pop #endif //------------------------------------------------------------------------------ @@ -1048,8 +1046,7 @@ namespace DirectX #pragma clang diagnostic ignored "-Wnested-anon-types" #pragma clang diagnostic ignored "-Wunknown-warning-option" #pragma clang diagnostic ignored "-Wunsafe-buffer-usage" -#endif -#if defined(__GNUC__) && !defined(__clang__) +#elif defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #endif @@ -1431,11 +1428,10 @@ namespace DirectX //////////////////////////////////////////////////////////////////////////////// -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif #ifdef __clang__ #pragma clang diagnostic pop +#elif defined(__GNUC__) +#pragma GCC diagnostic pop #endif #ifdef _PREFAST_ #pragma prefast(pop) diff --git a/Inc/DirectXPackedVector.h b/Inc/DirectXPackedVector.h index 6491e91..764bd49 100644 --- a/Inc/DirectXPackedVector.h +++ b/Inc/DirectXPackedVector.h @@ -29,8 +29,7 @@ namespace DirectX #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu-anonymous-struct" #pragma clang diagnostic ignored "-Wnested-anon-types" -#endif -#if defined(__GNUC__) && !defined(__clang__) +#elif defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #endif @@ -1402,11 +1401,10 @@ namespace DirectX } }; -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif #ifdef __clang__ #pragma clang diagnostic pop +#elif defined(__GNUC__) +#pragma GCC diagnostic pop #endif #ifdef _MSC_VER #pragma warning(pop)