<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/126113>126113</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang FE] Possible logic issue in `TransformTypos::TransformDesignatedInitExpr`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
d367wang
</td>
</tr>
</table>
<pre>
When running the tree-visitor `TransformTypos` on a `DesignatedInitExpr` node, it first tries to transform its initializer
```
// transform the initializer value
ExprResult Init = getDerived().TransformExpr(E->getInit());
```
and later on decides whether the AST changes by
```
ExprChanged = ExprChanged || Init.get() != E->getArrayIndex(D);
```
at https://github.com/llvm/llvm-project/blob/5492199a9aa4b5d31c38e36928ac153570091d6d/clang/lib/Sema/TreeTransform.h#L13659
The logic in `Init.get() != E->getArrayIndex(D)` seems not correct as the initializer and the index of the designator are being compared, which is likely to always be false.
Ran debugger on clang compiling a designator example
```
const char *str[] = {
[some_typo] = "0"
};
```
and stepped in to the line, `Init.get()` is a StringLiteral and `E->getArrayIndex(D)` is a TypoExpr.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUlFGP4yYQxz8NeRldhMHG8YMfsslaOukeqttIfaywGdu0BCzA2U0_fQXJpdu9VaWTLFk2MPznP78ZGYKeLGJLqidSHTdyjbPzreKifpV22vROXdvfZ7TgV2u1nSDOCNEjfrnooKPzQAQ9eWnD6Pz5dF1cIIKCsyDTyhFTfBlRfbU6Pr8tPq1ap5CwA-gIo_YhQvQaA0QH8Uck0DGAtjpqafTf6AndE0HvD90T1hHWvdueZL3bDhdpViR0D5Au_Y5hNRGSBiD8CBPGI3p9QUXYjrBm-8ggS2S75y-EP08Y04nblvTwpw8ypFVgZESfElY4aIUBXmeMM_osaf9ygmGWdsIA_fXD6XTXIS-qrOo_3_WB1IeseDvhXQMQVuSNd3V77-X1q1X4Rtju-LnCCHOMSyD87tmk47z228GdCeuMufx4fVm8-xOHSFjXG9cT1lVlw4qmkY2UZV8pXgx8h1w0bCeHouJVTWlTKKEI6wYj7ZQC6XTwBc-SsO7kER--bmfC-LeCi6pJCun-NCMYN-kBtE2k_GqmgkJAPAewLsLgvMchggw_gZBKdPun8A3cmD_UHUvnQXqEHhPZgzsv0ickDvA662EGHcDov9BcE5rSvMprgB5hlCbgFm55fJep8v06TTcKshU5ljYpqnx_Gb7J82LwQ40GZ0NMmHggbB-ivzVjZoLUT5liAFI9BXfGP-J1cY9VxihhLMWrj5_jGSIuC6rkcuqv5Lq2uft-Mj15qgNIeIle2-mbjuilyQ4SQf-3FPlY6v7E8HajWq4a3sgNtkXNdzvR8LLczG1Bi34sGtWLWnEx7rjAseLjrhdVXytRbnTLKKsoo6Joiqost0wKXpZ0FDXnnDaClBTPUpttYnbr_LTRIazYFkwUBd8Y2aMJeZoxdqeSpcHm2wx5v06BlNToEMO_IaKOJo_AQy5e95z8_c2FoHvzoDRdc2f1w7zje8L3j3-fjrzN6k37y42Y7wyEdffsLi37JwAA__8IFcfF">