<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJy1Vktz2zYQ_jXUZYccEhQt6aCDHvXUqep0Yic9akASlNCABAOAtvTvswAfomRnmmmmHIgC970fFgukMj8vnyUoViuZNxnzwq0Xrvzx05K8u7Ab7rM87wsuGHjxFjxCuuFYvDJQUl55ZO6RRac9W7cTAMs-OT3ixQNVMdOoCk4DyZttu8m1det1X9Gydz0zTJsgw0nvPWcnsI_lZ-IUPFhKkClGDRvHZBroHivp9IKaKm2FBi8e2TSVpi8sd_lqFPWS9Y1EB4a1nGwvOZMYcfjKQMtGZewTrQ4MCqls0Cf8oUs7vcGjz0OrbK-qwyiPp4uZoFCy3AuZUcNlpW1WHY4XwV3HbWVrqbn9QlHTYMimCQ7MdGEjKdA1E4JXBxs-2UzxN2un_4PlUV38AKzeRY8X-Sm8EJA3eP1ysFF4FaSxmyWjNXKg98k15KzgFTdMnKGSBkPVPGfQLaIXrwYDF0vvbQRLdxU5-w2H-wff7x1dyyBzM6b0zt56ShsD5miLTwj5itkB1ZopB_ArFwIKykUr3jKGzNpcbkxfd4L2_WzN89NN-3hXAemQddvt7IULEpLIj4hPIojmCFWU4GuaBGH_gB8mYe-NrNtxMQFvDNy51w8MTEMc4MdJbGscK2o9TB2rr_fR0zWnZ9WwGy4TvADNRBFoQ5UJsHRcY7KrKhFy5SjD-l9ZtSujbSNzjbTgShtw0i1KY9FrJ5kUTYl7Id5c3LS0UaGt_4t-T3PCrMpvzcLt8y_IXCDoQRks_ywugl7B8m7xfWFK21rmVSHfHmDvK5Ip1LwGfZSv2C1oX9yPtqPHqzGps26pURR0-k9NWVJ1tkTBUycN9dkcMYoUCxP3mG4Ff5cl82t6cFaPxtQ2aXKPwykFQryUgVQHS3MKqwatKCu92335EwyjJfhou-bQ1ELSHNIz7CTP4AP91rCSmbGez0q7l1H78-Mfjx__fmyZO56xSrsYuinYOPDz49MDrGo8_fGI62mfK_5ikzZnkAU82IYoOZ4y94-bJ9SoWQVtc-2NdU66VmtNoHCjFb7tISXsP0_x3UIUB9hc79G-RSb7iuB0YH1i3xqu7Cm7uiLkfnq-1Ha_kpN8GeeLeEEn1OW-_EAzmWIvSyeNEksLth7QPnBzbFIs6NIGg6B3fz6m_g_LDH5yrRtm00zInMwmxyUjUU4TErEwykiWhrPpbJGkd_NsmpC7PKETQVMm9NLdCEjFXsGZsHeVZDv59Qj40ra2iJCIxNE8WWBHm2ezsJgnsyhCzgLblVvvoYomaulMpg3W3zQUXBt9YWJz54eKMRcwRmi4Ee5jx9ONK_jE3m7-aut43ddxsoXx3WO_z2Rl8IKn9_v2PtW1AY0bMJMKj0cDL1Q07W3n-hgGHG5z2y09cfkuXbLfAXcREes>52827</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LibClang][Python Bindings] SourceRange.__contains__() returns incorrect value for SourceLocation on same line
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Jacobfaib
</td>
</tr>
</table>
<pre>
To reproduce
-------------
```
my_file = """
int main()
{
int x = 2;
return x;
}
"""
file_name = 'test.c'
index = clx.Index.create()
tu = index.parse(file_name,unsaved_files=[(file_name,my_file)])
# make sourceRange for 'x' in 'int x = 2;'
src_rng = clx.SourceRange.from_locations(
clx.SourceLocation.from_position(tu,tu.get_file(tu.spelling),4,7),
clx.SourceLocation.from_position(tu,tu.get_file(tu.spelling),4,8)
)
# make sourceLocation for '2' in 'int x = 2;'
src_loc = clx.SourceLocation.from_position(tu,tu.get_file(tu.spelling),4,10)
# to recap, src_loc is definitely not inside src_rng:
#
# int x = 2;
# ~~ ~ -- src_loc
# |
# src_rng
#
# but the following assertion will fail
assert src_loc not in src_rng
```
The fix
---------
```
--- cindex.py 2021-12-21 18:15:45.000000000 -0500
+++ cindex.py 2021-12-21 18:16:16.000000000 -0500
@@ -353,7 +353,7 @@
return True
elif self.start.line == other.line:
# same file first line
- if self.start.column <= other.column:
+ if self.start.column <= other.column <= self.end.column:
return True
elif other.line == self.end.line:
# same file last line
```
Version info
------------
```
$ pip show clang
Name: clang
Version: 11.0
Summary: libclang python bindings
Home-page: http://clang.llvm.org/
Author: LLVM team - pypi upload by Loic Jaquemet
Author-email: UNKNOWN
License: License :: OSI Approved :: University of Illinois/NCSA Open Source License
Location: /usr/local/lib/python3.9/site-packages
Requires:
Required-by:
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1Vktz2zYQ_jXUZUccEjQj6aCDHvXUqep0Yic9akASlNCABAOAtvTvuwuSetmZZtopBqLAfePDYpeZLo7zZw1GNEYXbS6CaB1Ei_Hl6EjBh6if_rU6bkupBATJGgLG-ulZsnZQcVkHbBqwWa89WXYLAGIfvB4LkhPVCNeaGg4nUjBZ94tr6-R1W_NqcD1xwrowx8XgvRAHoEH8XB3CB6KEuRHcicuYXAv9IEmvFzbcWBI6eQnYqq0tfxGF369F0SBd3kj0YJDldH3eM0sQh28CrG5NLj7zeieg1IaCPuAPXdLyBo9hH9bkW1PvLvbxdDYTlkZXW6Vz7qSuLe2qx_EsuOm5nWyjraQ3FHUthuzacCdcHzaSQtsIpWS9o_DZ6g5_k275P1i-yIsfgDW4GPBiP4UXAvIGr_8cbBxdBenosuS8QQ4MPqWFQpSylk6oI9TaYahWFgL6QwySxcnA2dJ7F4HoPiMnv-D0_zAeD46uZZC5uqQMzt56yloHbk_Jp5R-xd0Bt1YYD_CrVApKLlUn3jFOO-v2cmP6uhJ0z2cyLw835eNdBaRD3l-3YxDNWMTicczGLIZ4ilDFKT7u0jAaBoyjNBq8sWU3zybgjYEP_vEDA3cRThgnaUI5jhm1PC09a8j3i9EXp2fTihuuULIEK1QZWseNCzF1fGGiU9UIufGU0_lfWaWTsVTIfCEtpbEOvHSH0qXotZNcq7bCu5Cszm462kWiLf-N_kDzwqIubs3C7fgHZM4QDKCcLP8sLopfwfJu8n0VxlIuy7rUbxvY-4rsDhrZgN3rV6wWfEjuR6royeKS1FsnahyHvf5TW1XcHImoZOaloTm6PUaRYWLiHbOd4K-6EuOG77zVvXMNbZrd4_RKoVIvVajNjmheYdGiFUPSm83X38EJXsEYbTcS2kZpXkB2hI2WOXzk31tRCXepNxYV3WXU_vL42-OnPx875kbmorY-hn4JFAe-fnp6gEWD3R9b3ED7UssX2rQ7gi7hgQqilthl7h9XT6jRiBq64joY6530pZZMoHBrDT6pSSn6lxk-O4iSEIvrPdonZPJvCE4P1mfxvZWGuuziilCMs-M5t4eTHBXzpJglMz5y0ikxx8a8kdnKn1xKbfqP7kCWw4Gka7hsotttrmuHXyp2u-0-DPp8tphJuTZY5x28cNV2bfu6nwBOn6WUm6PWqDkdrj2d7k66fZvhBapo83jI_d8Yof4LDeOrtLYVBGvKpmwy2s8jPmUiZcmU82mWxTzNRZmWfrC8KPlI8UwoO_dfIKwWr-BN0LdRuh7JORXCmLGYJfE0nWH9m-aTqJymkzhGzgyLm8-OU86NzNyHlLUIzl2kpHX2zMRWIHe18LiSfe4TbP6R5zrDhpGNvPO5D_5vuQ7-IA">