<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/144439>144439</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [LLDB] SBMemoryRegionInfoListExtensions re-uses reference and then mutates it.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Jlalond
      </td>
    </tr>
</table>

<pre>
    In [SBMemoryRegionInfoListExtensions](https://github.com/llvm/llvm-project/blob/main/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i#L8), the `__iter__` function always yields the same `SBMemoryRegionInfo` reference, but each loop the content of the info will be updated.

Using the example that I wrote in the docs:

```
        readable_regions = []
 for region in exe_ctx.GetProcess().GetMemoryRegions():
            if region.IsReadable():
 readable_regions.append(region)
```

We end up with a list all to the same region

![Image](https://github.com/user-attachments/assets/01a42ef4-2b24-47f5-a304-1096bfc6c81e)

This is because in the iter:

```
    def __iter__(self):
      '''Iterate over all the memory regions in a lldb.SBMemoryRegionInfoList object.'''
 import lldb
      size = self.GetSize()
      region = lldb.SBMemoryRegionInfo()
      for i in range(size):
 self.GetMemoryRegionAtIndex(i, region)
        yield region
```

Region is a reference, and we will in the contents every loop, but if you assign anything to this reference, it will then be mutated next loop.

I filed this as an issue to communicate the bug because I assume a user has encountered this without realizing (because it's not very apparent).

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVVGP6jYT_TXmZURkTAjhgQf27scnqq1U7W3VRzROJsSVY0e2s8D--spO4LLbXq0aRYIk4zMzPud40Ht1MkRbtnpiq-cZDqG1bvuLRm1NPZO2vm4PBtjq6fvTr9RZd32lk7LmYBr7onz43yWQ8coaz1bPTJRtCL1nyx0Teyb2JxXaQWaV7ZjYa_12-5n3zv5FVWBiL7WVTOw7VCZ9rOOTVKZW5uSZ2CsTyDVYERP7r0rIFBPLl5KJDRPfILQErODHowrkjkdWcGgGUwVlDaA-49XDVZGufYr02KXwf-aICx015MjEKr6BHAIQVi1oa_u0uLImkAlgm_SoTGPhrLQGSTD0NQaqM8Z3jO_-8MqcUhBdsOs1QWgxwAHOzoa4Mn2rbZU2MS1hBZ9uvoPpcoQ1Sk1Hl8r0wJbPMFIYoxrrYPwSEelCxypcsv9T-M3ZirxnIm5SfPHY7PR6TAwPl2omtOzgX6fMH2I_l5Nh35OpmSjHFzHyYyOM7_4kIFPD0MNZhRYQtPIBUGsI9gclE8C4E2LBVk-HDk_0pdoGT26OIWDVdmRClBJ6T-kPX2AuqMnnQop8nq-b1RyXPJ8v-KaQTVVU5YKmkvnu91Z5UB4kVTj4O0VRVD-lqKYG7roTpSfdfNpYJtbjfQjkMBDYN3Jj8y1Bl1iBG7nKxN3Rtcz-3QFgZXRTdgeNaVTXWxfSsntWr94pSSVWFOn_rt5vTN5iJt3EqJ-k_LQgik3FGh2aU0TzCfTW7i3VI8ouHExNFyZKFQ31KJKb5pI1H9j_qJ3XSdwe8KM30dRwptF8E1OTOT3QG7lrMu3NxaqBqx1gPAQBzTW0yZ5Rf8p_RFZhRA0tmejrbgjR12DoEhLo5PADNEpTPSKgB4xl-oEiamW7bjCqioTH0uRwuuvqEMsYOgKEqF1o0QOZyg7xALzhRafYIUTDafUea2WivCszMLH2YGyA1Cn2PToyIVqd8d2s3i7rzXKDM9ou1iu-WPC8LGbtlpNcF_myxmW-bMpmua4aLjmhLEtZCCpnaiu4WPFiUYhFXvIiWyM1UuK6yLGqNus1yzl1qHQWD_fMutMstbxd5Hm-3Mw0StI-jRghDJ3HDWFCxInjtmkiyOHkWc7jGeB_wAQVdJpNLy_P8XCDr0YAOJoPnh64S5JIpI2MeVAhmw1Ob__zrEplxwNk6uttK_4OAAD__37aV-U">