<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/71618>71618</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[C++20] [Modules] Record BMI Hash which is consistent if the interfaces doesn't change
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:modules
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
ChuanqiXu9
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ChuanqiXu9
</td>
</tr>
</table>
<pre>
The motivating example comes from https://github.com/llvm/llvm-project/issues/70569.
For example,
```C++
// a.cppm
export module a;
export int a() {
return 43;
}
// use.cc
import a;
int use() {
return a();
}
```
After we change the implementation of `a()` from `return 43;` to `return 44;`, we can avoid recompiling use.cc to use.o since the interface doesn't change.
This is pretty helpful to improve the user's experience by avoiding unnecessary recompilations as much as possible.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykk7uO4zoMhp-GbogTyIqvhYtcEJxTTHMwxbayTMda2JJXlDOTt1_4kpkJZrsFBMv4BX0_KZKK2VwtUQXpEaQ8dZOyv8yPqQQpIT1Hagqd89WnHtWuuVevHeHggrmpYOwV6V0NY0-o3UCMrXcDdiGMDPsDyAvIy9WEbqp32g0gL31_e2z_jN79JB1AXgzzRAzykos0K3cgziAO6_fi_MMC5OnrCWRiXSeQx3mt6uKJaqfHcVgleh-dDzi4ZuoJFeyPT7qxARXIAmSJkG9niIiewuQtJvuPG5CfnyJYvSamndarZIaF-Wky0yemb_wNvhn_weGR3VfDQxvI4xuh7pS9EoaO0MxPM5ANKhhn0bUImXhgM7FWBDLxlE0mMLivarKqIE8LXllUN2ca9KTdMJp-rvSa53xx_nPIxuotBhvIt0oTNo7YgszDFuJWy9fOMBrG0VMId-yoH9upn1FmGL27rZiJyYPMGel9JG9oxtf3NZIlAGtJE7Py94_AlqwZFeMw6W7eR8ds6v5hHTXVvin3pYqoirOyTESex0XUVXVBbZq3lGRaNDLPZZvGhZZZ0yZJ2mQiMpUUch_HohBxEqfFLpM6q_NSqCKTWZELSAQNyvS7uZ13zl-jpZGrPM7iIupVTT1vw6V7Za-wP6xNyNuE-WoZhHq6MiSiNxz4kxVM6JfZ3PpbCkjPCOnxZWOkZ_yftPMNHl_-w38Vd_jWGd3ND62dZcOBbEDTPteIvxUpmnxf_cXQzun-DgAA__9uIFNW">