Additional test coverage for redeclared `friend`, `inline` functions.

PiperOrigin-RevId: 471852475
diff --git a/rs_bindings_from_cc/ir_from_cc_test.rs b/rs_bindings_from_cc/ir_from_cc_test.rs
index bad43c1..315d674 100644
--- a/rs_bindings_from_cc/ir_from_cc_test.rs
+++ b/rs_bindings_from_cc/ir_from_cc_test.rs
@@ -3382,6 +3382,68 @@
 }
 
 #[test]
+fn test_function_redeclared_as_friend() {
+    let ir = ir_from_cc(
+        r#"
+            class SomeClass final {
+              friend constexpr int bar();
+            };
+            constexpr int bar() { return 123; }
+        "#,
+    )
+    .unwrap();
+
+    // The function should appear only once in IR items.  (This is a bit redundant
+    // with the assert below, but double-checks that `...` didn't miss a Func
+    // item.)
+    let functions = ir
+        .functions()
+        .filter(|f| f.name == UnqualifiedIdentifier::Identifier(ir_id("bar")))
+        .collect_vec();
+    assert_eq!(1, functions.len());
+    let function_id = functions[0].id;
+
+    // There should only be a single Func item.
+    //
+    // Additionally, this assert also verifies (a bit haphazardly) that
+    // `child_item_ids` and `top_level_item_ids` have the right length, which
+    // indirectly verifies that the `function_id` is included in
+    // `top_level_item_ids` and is not included in the record's `child_item_ids`).
+    assert_ir_matches!(
+        ir,
+        quote! {
+            items: [
+                ...
+                Record(Record {
+                    rs_name: "SomeClass" ...
+                    child_item_ids: [
+                        ItemId(...),
+                        ItemId(...),
+                        ItemId(...),
+                        ItemId(...),
+                        ItemId(...),
+                        ItemId(...),
+                    ] ...
+                    enclosing_namespace_id: None ...
+                }),
+                Func(Func { name: Constructor ...  }),
+                Func(Func { name: Constructor ...  }),
+                UnsupportedItem(UnsupportedItem { name: "SomeClass::SomeClass" ...  }),
+                Func(Func { name: Destructor ...  }),
+                Func(Func { name: "operator=" ...  }),
+                UnsupportedItem(UnsupportedItem { name: "SomeClass::operator=" ...  }),
+                Func(Func {
+                    name: "bar" ...
+                    enclosing_namespace_id: None ...
+                    adl_enclosing_record: None,
+                }),
+            ],
+            top_level_item_ids: [ItemId(...), ItemId(#function_id)]
+        }
+    );
+}
+
+#[test]
 fn test_incomplete_record_has_rs_name() {
     let ir = ir_from_cc(
         r#"
diff --git a/rs_bindings_from_cc/test/struct/operators/add_assign.h b/rs_bindings_from_cc/test/struct/operators/add_assign.h
index 7bffbe4..90b392b 100644
--- a/rs_bindings_from_cc/test/struct/operators/add_assign.h
+++ b/rs_bindings_from_cc/test/struct/operators/add_assign.h
@@ -63,4 +63,18 @@
 AddAssignFreeByValue& operator+=(AddAssignFreeByValue& lhs,
                                  AddAssignFreeByValue rhs);
 
+// This provides additional test coverage for b/244311755.
+struct AddAssignInlineFriendByValue final {
+  friend inline AddAssignInlineFriendByValue& operator+=(
+      AddAssignInlineFriendByValue& lhs, AddAssignInlineFriendByValue rhs);
+
+  int i;
+};
+
+inline AddAssignInlineFriendByValue& operator+=(
+    AddAssignInlineFriendByValue& lhs, AddAssignInlineFriendByValue rhs) {
+  lhs.i += rhs.i;
+  return lhs;
+}
+
 #endif  // CRUBIT_RS_BINDINGS_FROM_CC_TEST_STRUCT_OPERATORS_ADD_ASSIGN_H_
diff --git a/rs_bindings_from_cc/test/struct/operators/add_assign_test.rs b/rs_bindings_from_cc/test/struct/operators/add_assign_test.rs
index 2b655cf..bc6949c 100644
--- a/rs_bindings_from_cc/test/struct/operators/add_assign_test.rs
+++ b/rs_bindings_from_cc/test/struct/operators/add_assign_test.rs
@@ -52,4 +52,12 @@
         s1 += s2;
         assert_eq!(33, s1.i);
     }
+
+    #[test]
+    fn test_add_assign_inline_friend_by_value() {
+        let mut s1 = AddAssignInlineFriendByValue { i: 111 };
+        let s2 = AddAssignInlineFriendByValue { i: 222 };
+        s1 += s2;
+        assert_eq!(333, s1.i);
+    }
 }