From da04a802aa4c0698e0230bd4f11abcee50b500f5 Mon Sep 17 00:00:00 2001 From: Ruijie Shi Date: Wed, 3 Jun 2026 09:57:47 -0700 Subject: [PATCH] D3D9On12: avoid taking address of WeakHash temporary in DerivedVertexShaderKey InputLayout::GetHash() returns WeakHash by value. Passing &inputLayout.GetHash() to memcpy takes the address of a temporary, which clang rejects with -Waddress-of-temporary (treated as an error). Bind the temporary to a named local so memcpy receives a real lvalue address. MSVC behavior is unchanged. --- include/9on12Shader.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/9on12Shader.h b/include/9on12Shader.h index 77a85ca..f51371b 100644 --- a/include/9on12Shader.h +++ b/include/9on12Shader.h @@ -212,7 +212,8 @@ namespace D3D9on12 DerivedVertexShaderKey(const ShaderConv::RasterStates& rasterStates, InputLayout& inputLayout, _In_reads_(MAX_VERTEX_STREAMS) UINT* streamFrequencies) : DerivedShaderKey(rasterStates) { //memcpy because assignment can add alignment which can throw off hashing - memcpy(&m_inputLayoutHash, &inputLayout.GetHash(), sizeof(m_inputLayoutHash)); + WeakHash inputLayoutHash = inputLayout.GetHash(); + memcpy(&m_inputLayoutHash, &inputLayoutHash, sizeof(m_inputLayoutHash)); memcpy(m_streamFrequencies, streamFrequencies, sizeof(m_streamFrequencies)); WeakHash hash = HashData(&m_rasterStates, sizeof(m_rasterStates), m_inputLayoutHash);//Add the hash from the IL