hpb: add arena check for set_alias + maps

PiperOrigin-RevId: 810537103
diff --git a/hpb_generator/gen_accessors.cc b/hpb_generator/gen_accessors.cc
index 3427fa1..d874a18 100644
--- a/hpb_generator/gen_accessors.cc
+++ b/hpb_generator/gen_accessors.cc
@@ -432,6 +432,11 @@
         R"cc(
           bool $class_name$::set_alias_$field_name$($const_key$ key,
                                                     $const_val_ptr$ value) {
+#ifndef NDEBUG
+            ABSL_CHECK(
+                upb_Arena_IsFused(arena_, hpb::interop::upb::GetArena(value)) ||
+                upb_Arena_HasRef(arena_, hpb::interop::upb::GetArena(value)));
+#endif
             $optional_conversion_code$return
                 $upb_msg_name$_$upb_field_name$_set(
                     msg_, $converted_key_name$,
@@ -453,6 +458,12 @@
         R"cc(
           bool $class_name$::set_alias_$field_name$($const_key$ key,
                                                     $mut_val_ptr$ value) {
+#ifndef NDEBUG
+            ABSL_CHECK(
+
+                upb_Arena_IsFused(arena_, hpb::interop::upb::GetArena(value)) ||
+                upb_Arena_HasRef(arena_, hpb::interop::upb::GetArena(value)));
+#endif
             $optional_conversion_code$return
                 $upb_msg_name$_$upb_field_name$_set(
                     msg_, $converted_key_name$,
diff --git a/hpb_generator/tests/test_generated.cc b/hpb_generator/tests/test_generated.cc
index a7e95c7..89ec0c1 100644
--- a/hpb_generator/tests/test_generated.cc
+++ b/hpb_generator/tests/test_generated.cc
@@ -768,6 +768,19 @@
             hpb::interop::upb::GetMessage(c2.value()));
 }
 
+#ifndef NDEBUG
+TEST(CppGeneratedCode, SetAliasMapFailsDifferentArena) {
+  hpb::Arena arena1;
+  hpb::Arena arena2;
+  auto parent1 = hpb::CreateMessage<ParentWithMap>(arena1);
+
+  auto child = hpb::CreateMessage<Child>(arena2);
+  constexpr int key = 1;
+  EXPECT_DEATH(parent1.set_alias_child_map(key, child),
+               "hpb::interop::upb::GetArena");
+}
+#endif
+
 TEST(CppGeneratedCode, SetAliasSucceedsForDifferentArenaRefs) {
   hpb::Arena arena;
   auto parent1 = hpb::CreateMessage<Parent>(arena);