<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129808>129808</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Increased memory consumption in ParentMapContext after clang-19
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
michael-jabbour-sonarsource
</td>
</tr>
</table>
<pre>
The memory increase can be observed when enabling any check that uses `ASTContext::getParents` in `clang-tidy`. By plotting the memory consumption when analyzing a sample file, I got the following chart which shows around 10x increase in memory consumption in clang-tidy-19 compared to clang-tidy-18 when the number of elements in the array is large enough:

Here is a script that generates the above plot:
```python
import matplotlib.pyplot as plt
import subprocess
def generate_cpp_file(file_name, num_elements):
elements = [100] * num_elements
elements_str = ', '.join(map(hex, elements))
with open(file_name, 'w') as f:
f.write(f"""
const char large_array[] = {{
{elements_str}
}};
""")
def measure_memory_consumption_with(clang_tidy_bin, num_elements):
file_name = f'file_{num_elements}.cpp'
generate_cpp_file(file_name, num_elements)
process = subprocess.run(['/usr/bin/time', '-f', '%M', clang_tidy_bin, '-checks=readability-magic-numbers', file_name, '--', '-std=c++17'], check=True, capture_output=True)
memory_kb = int(process.stderr)
return memory_kb // 1024
def plot_memory_consumption():
num_elements = [10 ** 1, 10 ** 2, 10 ** 3, 10 ** 4, 10 ** 5, 10 ** 6, 3 * 10 ** 6, 5 * 10 ** 6, 8 * 10 ** 6]
memory_consumption_17 = [measure_memory_consumption_with('clang-tidy-17', n) for n in num_elements]
memory_consumption_18 = [measure_memory_consumption_with('clang-tidy-18', n) for n in num_elements]
memory_consumption_19 = [measure_memory_consumption_with('clang-tidy-19', n) for n in num_elements]
plt.plot(num_elements, memory_consumption_17, label='clang-tidy-17')
plt.plot(num_elements, memory_consumption_18, label='clang-tidy-18')
plt.plot(num_elements, memory_consumption_19, label='clang-tidy-19')
plt.xlabel('Number of elements')
plt.ylabel('Memory consumption (MB)')
plt.legend()
plt.show()
if __name__ == '__main__':
plot_memory_consumption()
```
I have installed `clang-tidy` binaries in this test from apt.llvm.org on an Ubuntu machine.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVlFvqzoS_jXOy4gITAjwkIemUbR96GqlPfuMBhiCzwEb2aZp9tdf2ZCStD295zayFGyP55uZb8YeNEacJNGOJXuWHFY42lbpXS-qFqkLfmJZqlEHRknURo26olWp6svuR0vQU6_0BYSsNKEhqFBCSaBKQ_qFaji3JIEklp2QJ0B5gaql6hfYFi2Mhgywbfjw3x-PSlp6tSx-YPHDiex_UJO0hm1DENLJVB3KU2BFfWHbcA37CwydstZptYsdlZJm7AcrlJygUWJ3-b_HBoP90BE0oiPGH-EJTsr6w43qOnV2QlWL2sK5FVULplVnA6jVKGuIwtfFSSE_wxMSFiODKIdK9QNqqsGqu51sMs0hy7EvSYNqgDrqncdOjdtBrfECwkCH-kRAUo2n1oUn9INHLNk_9XgilhwYz1prB-O2-ZHx40nYdizXleoZP46GdIDWYtV6BMaPaAz5D2qSOKIkDXiWY7ApeRpguMGg2cZ1WpZ1ihQxnk-g_yJNziIEU2kx2InEE0nSaMlMZpfqhTw1i63bcBrDxbZKsvBB9IPSFnq0TrAT5Xq4uC9AA0NnFwkzloNWFRkzqaqpecMrqmEoJi4z91dI7D2vcuyLazSd7d4OWALM4gOwZB-FIUsOwPjD_Ylb2cJYPcnz1KlmPF3_VEIynvU4uLDTq1u_hfPRAjgL24IaSL43j_H07NXlzt3mah5Asz5rYb07jPN5TFvXn0s365N0SovCZ8lUtpOd6d6N-1Pglm9dYunhnYhbSQ8s9kcX9Cvzc-h7QjNqKqbkL26Sv3DuMp75NC9cmhelC9Nv2XgLiTe7YTz1Kyzd3x1ID-tqGFy4wod_zrwDmvPHwyzptNajI8ZFzlFxHI1m_OhNPlrhtF35Dprlm_HkeZ59dNTJ-rvNsPigCWssRSfsJejxJKpgqnQzH3-fEUFwg2hszeJDxfie8X2Uuh1X44_T1cniww89-oMVDtbxoUY7jPZtY3J8JulX6V0X0jKeXb03tiatr5Ka7Kjl7QF_iUAU8s0d_65GPyHfBXJh9paEpdZcnblSi5zdy5TfT-P76eZ-mtxPt24a-wJ-t5h8tph9WEwOk2tvsbpN6Ci9Gv_3Wc94enu_pzOX0tV4ozT4t-EuOT30p7DZt2GzP4X9FDf_Nm7-p7hDZ9f-ZeDZfaU-fk6A2-iwpI7Fh09DnH9Da_aF1uzbWvMvtOb3Wl8nMR_Gf394_hdZL3y5EX7-2HIwnj3v_aNzi9DRiWQ9V-VVk-tm3pamIRoo_CVUFI78-Z0rih6FLAqncyrpr8v-5oFn4cMTtPjiOiRjseuo_tC6QSkkakFzoyMMWDIWGq16wMGuu-6lXyt9AuWaN_hfOUo7Qo9VKyStV_UurvM4xxXtonQTRXGS83jV7sIqDLOEypRHDUbRBiPaJilhkjYVYr1diR0PeRLGYRKGCQ_jdZlsw7zOmnKTJ5wSZJuQehTdmwUrYcxIu4jnWZitPBHGt8icSzqD33WPZHJY6Z07FJTjybBN2AljzaLGCtvR7mluHuvftI5Tw_uMw9wJAzaW9Nw3Rvlq1N3uiybPoc1_waDVT6os40dvo-vzZidedvyvAAAA__-oCsT9">