Suppress memcpy writing to an object with no trivial copy-assignment warnings
We need to copy padding in most of these cases, and the objects are trivially copyable; however, BitField prevents trivial copy-assignment.
This commit is contained in:
parent
ac7a17579e
commit
3024ca2146
|
@ -101,7 +101,14 @@ void FifoPlaybackAnalyzer::AnalyzeFrames(FifoDataFile* file,
|
||||||
part_start = offset;
|
part_start = offset;
|
||||||
// Copy cpmem now, because end_of_primitives isn't triggered until the first opcode after
|
// Copy cpmem now, because end_of_primitives isn't triggered until the first opcode after
|
||||||
// primitive data, and the first opcode might update cpmem
|
// primitive data, and the first opcode might update cpmem
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||||
|
#endif
|
||||||
std::memcpy(&cpmem, &analyzer.m_cpmem, sizeof(CPState));
|
std::memcpy(&cpmem, &analyzer.m_cpmem, sizeof(CPState));
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (analyzer.m_end_of_primitives)
|
if (analyzer.m_end_of_primitives)
|
||||||
{
|
{
|
||||||
|
|
|
@ -150,7 +150,14 @@ void Init()
|
||||||
{
|
{
|
||||||
auto& state = Core::System::GetInstance().GetMemoryInterfaceState().GetData();
|
auto& state = Core::System::GetInstance().GetMemoryInterfaceState().GetData();
|
||||||
static_assert(std::is_trivially_copyable_v<MIMemStruct>);
|
static_assert(std::is_trivially_copyable_v<MIMemStruct>);
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||||
|
#endif
|
||||||
std::memset(&state.mi_mem, 0, sizeof(MIMemStruct));
|
std::memset(&state.mi_mem, 0, sizeof(MIMemStruct));
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shutdown()
|
void Shutdown()
|
||||||
|
|
|
@ -136,7 +136,14 @@ static bool DeserializeExtensionState(DesiredWiimoteState* state,
|
||||||
return false;
|
return false;
|
||||||
auto& e = state->extension.data.emplace<T>();
|
auto& e = state->extension.data.emplace<T>();
|
||||||
static_assert(std::is_trivially_copyable_v<T>);
|
static_assert(std::is_trivially_copyable_v<T>);
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||||
|
#endif
|
||||||
std::memcpy(&e, &serialized.data[offset], sizeof(T));
|
std::memcpy(&e, &serialized.data[offset], sizeof(T));
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,14 @@ CPState g_preprocess_cp_state;
|
||||||
|
|
||||||
void CopyPreprocessCPStateFromMain()
|
void CopyPreprocessCPStateFromMain()
|
||||||
{
|
{
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||||
|
#endif
|
||||||
std::memcpy(&g_preprocess_cp_state, &g_main_cp_state, sizeof(CPState));
|
std::memcpy(&g_preprocess_cp_state, &g_main_cp_state, sizeof(CPState));
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<std::string, std::string> GetCPRegInfo(u8 cmd, u32 value)
|
std::pair<std::string, std::string> GetCPRegInfo(u8 cmd, u32 value)
|
||||||
|
|
|
@ -608,7 +608,14 @@ AbstractPipelineConfig ShaderCache::GetGXPipelineConfig(
|
||||||
static GXPipelineUid ApplyDriverBugs(const GXPipelineUid& in)
|
static GXPipelineUid ApplyDriverBugs(const GXPipelineUid& in)
|
||||||
{
|
{
|
||||||
GXPipelineUid out;
|
GXPipelineUid out;
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||||
|
#endif
|
||||||
memcpy(&out, &in, sizeof(out)); // copy padding
|
memcpy(&out, &in, sizeof(out)); // copy padding
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
pixel_shader_uid_data* ps = out.ps_uid.GetUidData();
|
pixel_shader_uid_data* ps = out.ps_uid.GetUidData();
|
||||||
BlendingState& blend = out.blending_state;
|
BlendingState& blend = out.blending_state;
|
||||||
|
|
||||||
|
@ -778,7 +785,14 @@ ShaderCache::GetGXPipelineConfig(const GXPipelineUid& config_in)
|
||||||
static GXUberPipelineUid ApplyDriverBugs(const GXUberPipelineUid& in)
|
static GXUberPipelineUid ApplyDriverBugs(const GXUberPipelineUid& in)
|
||||||
{
|
{
|
||||||
GXUberPipelineUid out;
|
GXUberPipelineUid out;
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||||
|
#endif
|
||||||
memcpy(&out, &in, sizeof(out)); // Copy padding
|
memcpy(&out, &in, sizeof(out)); // Copy padding
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
if (g_ActiveConfig.backend_info.bSupportsDynamicVertexLoader)
|
if (g_ActiveConfig.backend_info.bSupportsDynamicVertexLoader)
|
||||||
out.vertex_format = nullptr;
|
out.vertex_format = nullptr;
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,14 @@ NativeVertexFormat* GetUberVertexFormat(const PortableVertexDeclaration& decl)
|
||||||
// The padding in the structs can cause the memcmp() in the map to create duplicates.
|
// The padding in the structs can cause the memcmp() in the map to create duplicates.
|
||||||
// Avoid this by initializing the padding to zero.
|
// Avoid this by initializing the padding to zero.
|
||||||
PortableVertexDeclaration new_decl;
|
PortableVertexDeclaration new_decl;
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||||
|
#endif
|
||||||
std::memset(&new_decl, 0, sizeof(new_decl));
|
std::memset(&new_decl, 0, sizeof(new_decl));
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
new_decl.stride = decl.stride;
|
new_decl.stride = decl.stride;
|
||||||
|
|
||||||
auto MakeDummyAttribute = [](AttributeFormat& attr, ComponentFormat type, int components,
|
auto MakeDummyAttribute = [](AttributeFormat& attr, ComponentFormat type, int components,
|
||||||
|
|
Loading…
Reference in New Issue