llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Zyn (zyn-li)

<details>
<summary>Changes</summary>

The `__iter__` method in `SBMemoryRegionInfoListExtensions` reused the same 
`SBMemoryRegionInfo` object reference across all iterations, only updating its 
content in each loop. This caused all yielded objects to be references to the 
same instance.

Moved the object creation inside the loop to ensure each iteration yields a 
unique instance:

### Testing
Updated the existing test in `**TestFindInMemory.py**` to:

1.  **Iterator vs Index Access Comparison**: Collects regions via iteration and 
compares their data with regions accessed by index to ensure they match
2.  **Data Integrity Verification**: Confirms that different regions have 
different base addresses (would fail before the fix since all collected regions 
had the same data)

The test validates both that the iterator works correctly and that each yielded 
object contains the correct data for its respective memory region.

---
Full diff: https://github.com/llvm/llvm-project/pull/144815.diff


2 Files Affected:

- (modified) lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i (+1-1) 
- (modified) lldb/test/API/python_api/find_in_memory/TestFindInMemory.py 
(+21-3) 


``````````diff
diff --git a/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i 
b/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i
index 29c0179c0ffe3..f565f45880119 100644
--- a/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i
+++ b/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i
@@ -9,8 +9,8 @@
       '''Iterate over all the memory regions in a lldb.SBMemoryRegionInfoList 
object.'''
       import lldb
       size = self.GetSize()
-      region = lldb.SBMemoryRegionInfo()
       for i in range(size):
+        region = lldb.SBMemoryRegionInfo()
         self.GetMemoryRegionAtIndex(i, region)
         yield region
     %}
diff --git a/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py 
b/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py
index 1ef37d2ec9898..4eabbb6e46774 100644
--- a/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py
+++ b/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py
@@ -154,14 +154,32 @@ def test_find_in_memory_unaligned(self):
         self.assertEqual(addr, lldb.LLDB_INVALID_ADDRESS)
 
     def test_memory_info_list_iterable(self):
-        """Make sure the SBMemoryRegionInfoList is iterable"""
+        """Make sure the SBMemoryRegionInfoList is iterable and each yielded 
object is unique"""
         self.assertTrue(self.process, PROCESS_IS_VALID)
         self.assertState(self.process.GetState(), lldb.eStateStopped, 
PROCESS_STOPPED)
 
         info_list = self.process.GetMemoryRegions()
         self.assertTrue(info_list.GetSize() > 0)
+
+        collected_info = []
         try:
-            for info in info_list:
-                pass
+            for region in info_list:
+                collected_info.append(region)
         except Exception:
             self.fail("SBMemoryRegionInfoList is not iterable")
+        
+        self.assertTrue(len(collected_info) >= 2, "Need at least 2 items")
+        self.assertEqual(len(collected_info), info_list.GetSize(), "Should 
have collected all items")
+
+        for i in range(len(collected_info)):
+            region = lldb.SBMemoryRegionInfo()
+            info_list.GetMemoryRegionAtIndex(i, region)
+            
+            self.assertEqual(collected_info[i].GetRegionBase(), 
region.GetRegionBase(),
+                           f"items {i}: iterator data should match index 
access data")
+            self.assertEqual(collected_info[i].GetRegionEnd(), 
region.GetRegionEnd(),
+                           f"items {i}: iterator data should match index 
access data")
+            
+        if len(collected_info) >= 2:
+            self.assertNotEqual(collected_info[0].GetRegionBase(), 
collected_info[1].GetRegionBase(),
+                              "Different items should have different base 
addresses")

``````````

</details>


https://github.com/llvm/llvm-project/pull/144815
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to