<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64201>64201</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-tidy segfaults on bugprone-unchecked-optional-access - observable from llvmorg-16.x.x to current main
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
combinatorylogic
</td>
</tr>
</table>
<pre>
Code to reproduce (as `clang-tidy test.cpp`):
```C++
#include <optional>
auto computeSomeStuff(double arg1) -> double;
class C1 {
void estimateWhatever() const;
};
struct S1 {
double a;
double b;
};
auto C1::estimateWhatever() const -> void {
for (int i = 0; i<1; i++) {
std::optional<std::pair<S1, int>> result{};
/*
Do something forgetful.
*/
auto& [cTf, errorcore] = *result;
cTf.b = computeSomeStuff(cTf.a);
}
}
```
With the following in `.clang-tidy`:
```
Checks: '
bugprone-*
'
```
Cause of segfault:
attempt to cast `ScalarStorageLocation` to `AggregateStorageLocation`.
Proposed fix:
test if `Loc->getKind() != StorageLocation::Kind::Aggregate` and just return nullptr if so.
[clang-bug-aggregatestoragelocation.tar.gz](https://github.com/llvm/llvm-project/files/12195811/clang-bug-aggregatestoragelocation.tar.gz)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVMFu4zYQ_ZrxZWBBpGzZPuiQ2PGleyjgBfZMUSOZW5oUyGE26dcXlONYSdOiBQRZHg3fezPzNCpGMziiBtaPsD4sVOKzD432l9Y4xT68Wj8YvWh999rsfUfIHgONwXdJE4LcqohQl9oqNyzZdK_IFLnQ4wh1CXIH1QOUByhv97q8XnuQj_m6RmVlnLapI4Rq70c23ikL1dP8qErsUfvLmJhO_kInTn0Pctv51FpCFQYBcodLqJ7wGoPqcQ6grYoR9wJh8xZHfPamQ4psLorpx1kxPVMAuc1I2rvId4zN4RNe5JA04-kD4E3Ne-57qP0SCnFW3V7kdlUP_yboWuCke0bb-5CHYRyjQagOWEL1iAaqDJkfrt2Wu_khxMjdlfHe8_17bFQmQLU_CZB7NI7zPKonDBST5QwzLwPkEeTDHRnx4DH6C_HZuCHrG4j7ZItZSj4gj_dA7gHIGmH9qL_3mZVC8EH7QLA-TGWBfHjjr2Zl6O990U7vv_BHfqkmJ75r3Rzug_hoy_l8fxg-I58Je2-t_5XLMC6bvbi7PR_5B4df_-7PpP-IUOUObd742zSMwTtafuoY3nO-FLRXKRL6HiMNvZqa8IFaMdNl5PyJahU5Sz1pZVU4sQ9qoG9eqzxmqMucA3X5MAyBBsX094xijvx78KOP1GFvXj6R5s8dTZ_RvnmdzTkQ_2Zc92ZakCIP5jPB5LApbXp6F5K1KdfhzxQZA3EKDl2yduSQWaL_oCs7ZZpFm4alumHEK5d94ypYhWL4E9YHkNsz85jHMfn1OBg-p7bQ_gLyaO3z7Wc5Bv-TNIM89sZSBHkUUuzWWyFAHv87pdx9UDvdF11TdbtqpxbUiHpXrtcbUW4X50aLWmxqIeq6q6tNJ7Zd2W_lthditdP9plyYRpayKjdyK9ZCrNbFpiIpq37VdULRjlawKumijC1yDYUPw8LEmKipV7IUC6tasnHa9FI6-oXTS5AyL_7QTHW3aYiwKq2JHO8obNhSM9vxNwNG9O5u5-R0djt1y9s6WSqtKUZcom8jhWeVF2Ef_AUztg_DUtTFS_EyWTaFQI7xooxbpGCb_z2qqZ48q6nevwIAAP__nC0GuA">