From dbc792a3ec9bccdb21765dd052ce92c61bdeb6d2 Mon Sep 17 00:00:00 2001
From: Lioncash <mai.iam2048@gmail.com>
Date: Tue, 12 Dec 2023 19:42:14 -0500
Subject: [PATCH] Common/Crypto/SHA1: Resolve -Wignored-attributes warnings

See commit 417d1310d22b11d5d724625721b5fec09eda099a for an explanation
on why we do this.
---
 Source/Core/Common/Crypto/SHA1.cpp | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/Source/Core/Common/Crypto/SHA1.cpp b/Source/Core/Common/Crypto/SHA1.cpp
index 57c45b09f3..f87bbd2c6d 100644
--- a/Source/Core/Common/Crypto/SHA1.cpp
+++ b/Source/Core/Common/Crypto/SHA1.cpp
@@ -166,7 +166,20 @@ public:
   }
 
 private:
-  using WorkBlock = CyclicArray<__m128i, 4>;
+  struct XmmReg
+  {
+    // Allows aliasing attributes to be respected in the
+    // face of templates.
+    __m128i data;
+
+    XmmReg& operator=(const __m128i& d)
+    {
+      data = d;
+      return *this;
+    }
+    operator __m128i() const { return data; }
+  };
+  using WorkBlock = CyclicArray<XmmReg, 4>;
 
   ATTRIBUTE_TARGET("ssse3")
   static inline __m128i byterev_16B(__m128i x)
@@ -244,7 +257,7 @@ private:
 
   virtual bool HwAccelerated() const override { return true; }
 
-  std::array<__m128i, 2> state{};
+  std::array<XmmReg, 2> state{};
 };
 
 #endif