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

    <tr>
        <th>Summary</th>
        <td>
            Local variable ranges overlapped in codeview. 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            lldb,
            debuginfo,
            platform:windows
      </td>
    </tr>

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

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

<pre>
    This is not a bug for llvm codeview generation. I find this only happens on modules from windows system libraries, but we need a way to handle this in lldb to describe the variable locations. @rnk @zmodem
```
$ llvm-pdbutil dump --symbols --modi=402 --symbol-offset=160 chrome.exe.pdb --show-children --children-recurse-depth=1
Mod 0402 | `d:\os\obj\amd64fre\minkernel\crts\ucrt\src\appcrt\dll\mt\..\..\tran\mt\objfre\amd64\util.obj`:
     160 | S_GPROC32 [size = 48] `_decomp`
           parent = 0, end = 800, addr = 0001:1350148, code size = 302
           type = `0x122B (double (double, int*))`, debug start = 9, debug end = 301, flags = opt debuginfo
     208 | S_LOCAL [size = 12] `x`
           type=0x0041 (double), flags = param | aggregate
     220 | S_DEFRANGE_REGISTER [size = 16]
           register = unknown (194), may have no name = false, range start = 0001:1350148, length = 9
           gaps = []
     236 | S_DEFRANGE_REGISTER [size = 16]
           register = RAX, may have no name = false, range start = 0001:1350183, length = 30
           gaps = []
     252 | S_DEFRANGE_REGISTER [size = 16]
           register = RAX, may have no name = true, range start = 0001:1350378, length = 36
           gaps = []
     268 | S_DEFRANGE_SUBFIELD_REGISTER [size = 24]
           register = EDX, may have no name = true, offset in parent = 0
           range = [0001:1350209,+77), gaps = [(45,19)]
     292 | S_DEFRANGE_SUBFIELD_REGISTER [size = 20]
           register = EAX, may have no name = true, offset in parent = 4
           range = [0001:1350256,+15), gaps = []
     312 | S_DEFRANGE_SUBFIELD_REGISTER [size = 28]
           register = EDX, may have no name = false, offset in parent = 0
           range = [0001:1350254,+134), gaps = [(19,13), (42,82)]
     340 | S_DEFRANGE_SUBFIELD_REGISTER [size = 24]
           register = EAX, may have no name = false, offset in parent = 4
           range = [0001:1350254,+37), gaps = [(2,15)]
     364 | S_DEFRANGE_FRAMEPOINTER_REL [size = 20]
           offset = 8, range = [0001:1350157,+293)
           gaps = [(200,21)]
...
```
Here's the range info:
[1350148, 1350157) -> register 194
[1350183, 1350213) -> RAX [1]
[1350378, 1350414) -> RAX [2]

offset 0:
[1350209, 1350254) -> EDX [3]
[1350273, 1350286) -> EDX [4]

offset 4:
[1350256, 1350271) -> EAX [5]

offset 0:
[1350254, 1350273) -> EDX [6]
[1350286, 1350296) -> EDX [7]
[1350336, 1350388) -> EDX [8]

offset 4:
[1350254, 1350256) -> EAX [9]
[1350271, 1350291) -> EAX [10]

[1350157, 1350357) -> fp reg + 8 [11]
[1350378, 1350450) -> fp reg + 8 [12]

Overlapping happens is different offsets means that the overlapped ranges have values for those offsets.
Notice that [1] overlaps with [3], [11] overlaps with [1], [3] - [10] and [2] overlaps with [12].
My question is that in the overlapped regions, how do we choose the location? 
For example, [1] overlaps with [3] and [11] in range [1350209, 1350213). There are three locations for the value at offset 0, rax, edx or fp reg + 8.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9WN9vozgQ_mvIixUE5kfgIQ9tk_Qqdberdk93upeVg52ELWAWQ5PsX38zNgkJZNuueroKBbDHM983Mx48XUq-n37dpIrAVciaMLJs1mQlK5JlLzlJJBcvqdiStShExepUFja5I6u04KTGZbLI9mTDylIU-EJyyZtMKLKqZE62ICa3iqi9qkVOsnRZsSoVyqI3YKYmW0EKITgY3bI9qSUoKngmjOa0AAh8icNcqKRKlzghyAuoYEuQymSiASmbWL5TFc94-wkARG45M8u5skKnvcwr9TWpccnBeJoR3uQlGY_VPl_KTMETrE0tb-Y79Dg8lquVEjWMuqFDkg3QErbYCRuUoNBGbsfJJs14JQp4PzyOK5E0lRJjLsp6g6sNhk-SEwf1W5MbAsi45V1ZwY1U-LP8Dr8s56G_qgQ85mnxLKpCZPCcVDXKNHCHm6oSFC1L88ozFMnx0bYPP3XFisMoqDYqtXbUA_xtNAjOAQQaG8E_ZInYnr7dfnl8uPEAaXCt0p-CAAniR1YwQ9zfuEhkXh59S7q_kgH_Wos7GGgBqYIvkaNfGeeVmXQcF2y7XuC4oBemMNnI0Zbn0IHuel-aSTDs7FxKr4lFIy4bzIfjE-pKi9qiEPIYr1Bb5gJTW9WsMujibvCA0QNIMLjK2FrpAVnWRiQtVvIEDnWi1k33DzdX92dOcmnrpN0l9yAFkHJ2juO7p5jjc8vgRpZrG2y9rsSa1eLUPj2EaTZfPF59vp1_e5zf3j19nT-eYwkBywADqEthR5o4NMVzIbcFQnFjv8WRM9zVL7A_JSlYbpStWKa0cyGz1uLEk8NQZqJY15vWzX3za1YajoD0HB71wv-K1uPV3x8jEnk9It4wmK8wCej_waSumreIeJN-RLzwd4iEUZ_I05_Xi7v5_ewyI-q_yWg-e5uRqbv4FTgrKAO9mniL_IQ1dTCPLXo9mbQpfUaRRn4Ag64uD-d840Hg3uDrvM33HRG8yNd_P98gNHzd4BLfM4Se-7sUow-F9LjdPhrTwG85ev7loGI8b1yvncQoU3iI6CDKnj-onx_P6vdUnA-HuXWB94u0Rr4mBc75hn6fL9w-zb883H0GqsD5_h1J3YLXX_Ou6gxRusHEoKSxjsWr1QYw65MBdU9R23CGuXSI-0PAOYZOlD4KGvv603w4xIDGk8_QEUxMxpY37-KFX7ozeVPttYt1_hh5KL2I0T3CasXbmoqPvuv3xWknrn9btzl9kKZGkWNcWy2wlVCL1zdKJx3GKOyL-5eN-gOjulAYLRO302KgB--FrvOQHGGdYwkH0KPOaDyAPhm41zuKe1HUF4_ezbTDGIR9pvHQvW6HceAY1-lZPSSOTnUD9STRViXmGlSgaxLp5a-mUOD8emE_mR5eRJXByT8t1se-C7olnq5WQhcU4w5FcsEK3Cas1ntFtuug3dLbRpki9cKyBts1aPjqjVTisLzdfZ9lnSbCaGk3wkGTgvYODxRtpmK9bXkOJdxOAoXJ-OhSwvDobfbMhXU43EL5tCc_ACp2fEhYQ4Iy2ucGOxxaQjQGrRnhEpvMZCORGooemkbLWxCjdwHUxY7lpWkcXmV5QGtogvW2Ag73sy4iNvm6gaAQqPRgvBInPWvr8TYAhB3iZnqmiu1068R3BMROc8Ie8anHYy9mozqtMzG9B41Z1xS3sT3xCKA8dPE2GTVVNt3Udalwt9AFXGvg1yxtaOfgBfvj9jYuK_ldJNBGLVKlGuzaF0EYuuFoM12ypRcGccL9mEdxEiQBc8JVENAkmASRF48ythSZmur6TrGNh5v5JNOunToOlRmrwR85YGr_ZYBzwWyUTqkDrc7Ejd04CDxq-44nJj6f8DBJlmAJOn6RM-hlEbEtq_WommrwYEPBZAblXnWTTKl0XQgxNWeiEWsg6avpP-JHw4q_mpEmOtUs_wUhzJkB">