Commit 192e9834 by Evan Brown Committed by Copybara-Service

Add static_cast<void*> to the sources for trivial relocations to avoid spurious…

Add static_cast<void*> to the sources for trivial relocations to avoid spurious -Wdynamic-class-memaccess errors in the presence of other compilation errors.

PiperOrigin-RevId: 479625866
Change-Id: Ia10ad35a2f58ffb3f36f996d357d5e126b181e1c
parent d8702605
......@@ -93,11 +93,12 @@ struct common_policy_traits {
slot_type* old_slot, char) {
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
if (absl::is_trivially_relocatable<value_type>()) {
// TODO(b/247130232): remove cast after fixing class-memaccess warning.
// TODO(b/247130232,b/251814870): remove casts after fixing warnings.
std::memcpy(static_cast<void*>(
std::launder(const_cast<std::remove_const_t<value_type>*>(
&element(new_slot)))),
&element(old_slot), sizeof(value_type));
static_cast<const void*>(&element(old_slot)),
sizeof(value_type));
return;
}
#endif
......
......@@ -428,9 +428,10 @@ struct map_slot_policy {
emplace(new_slot);
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
if (absl::is_trivially_relocatable<value_type>()) {
// TODO(b/247130232): remove cast after fixing class-memaccess warning.
// TODO(b/247130232,b/251814870): remove casts after fixing warnings.
std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
&old_slot->value, sizeof(value_type));
static_cast<const void*>(&old_slot->value),
sizeof(value_type));
return;
}
#endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment