<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">