<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/116928>116928</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            CallExpr has incorrect begin location with "deducing this"
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:frontend,
            c++23
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          HighCommander4
      </td>
    </tr>
</table>

<pre>
    In the following code:

```c++
struct S
{
    int bar(this S&);
};

int main()
{
    S waldo;
    int x = waldo.bar();
}
```

The AST dump of `main()`, taken with a recent trunk, is:

```
`-FunctionDecl 0x55ac3a911f78 <line:6:1, line:10:1> line:6:5 main 'int ()'
  `-CompoundStmt 0x55ac3a912988 <line:7:1, line:10:1>
    |-DeclStmt 0x55ac3a9127c8 <line:8:5, col:12>
    | `-VarDecl 0x55ac3a9120a8 <col:5, col:7> col:7 used waldo 'S' callinit
 |   `-CXXConstructExpr 0x55ac3a9127a0 <col:7> 'S' 'void () noexcept'
 `-DeclStmt 0x55ac3a912970 <line:9:5, col:24>
      `-VarDecl 0x55ac3a9127f8 <col:5, col:23> col:9 x 'int' cinit
        `-CallExpr 0x55ac3a912948 <col:19, col:23> 'int'
          |-ImplicitCastExpr 0x55ac3a912930 <col:19> 'int (*)(S &)' <FunctionToPointerDecay>
 | `-DeclRefExpr 0x55ac3a9128b0 <col:19> 'int (S &)' lvalue CXXMethod 0x55ac3a911e58 'bar' 'int (S &)'
          `-DeclRefExpr 0x55ac3a912860 <col:13> 'S' lvalue Var 0x55ac3a9120a8 'waldo' 'S'
```

The `CallExpr` for `waldo.bar()` is reporting `col:19` as its begin location, even though the descendant `DeclRefExpr` for `waldo` is at `col:13`.

This is misleading, and causes problems for tooling like clangd whose hit-testing algorithm (used for go-to-definition) skips the `CallExpr` node when hit-testing the `waldo` token because it falls outside of the `CallExpr`'s reported source range.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8Vl1v4ygU_TXk5SoRhsQfD37opFPtPKy02oxGfcVwY7PFEAFuO_9-he0kTtqOZDk2hnPuOfdyiQhBtxaxJrtvZPe4EkPsnK__0m23d30vrEK_XTVO_a5_WIgdwtEZ4960bUE6hYQ_EPpI6Pme0-mShH1L1zgaoh9khMM8p5iHAQC0jdAIT1gZOx3gQFhOWEX4t_Pcx-vzeE8LeqEtYWWa-BHxAG_CKHdZdmZ5B8Ifp2-bifGe6FbBkvRnh_Bw-Alq6E_gjkByuoghp4TtIYoXtPCmYwcCPEq0EaIf7Ev6qMNXRl1e10-DlVE7-4jSAH3f7YTkosqyY1EC4XujbXI7J_whS5Dze0bHAf4dFhN2o0VAWJGUz2Gy4mxIYtu7_uQGqw6xjws2VpVLtuIrtqu3pNivU8j3QIVcApUpqgQknUkQ7B5jDOqX8HfqGRUjzLRsgVAkyfMjDAHVlNqk-UBYAVIYo62OM0limIU_P--dnUry-_vJ38Qs6JVsZDjDEVa8Oq1mL8E6fJd4ildTE_RnNlQFXdhQ3Ypg2xsb4CsTiuPnJjB-daFKFT4mfJS_0A5X7L0w5l50tV2AZ9U9-gXzFm1K_I_-ZLTUcS_CBzMrTm9wL1iTiQ9jTZYHmLd8Mpnvz5vgp_vHaRsxWSF-X106V0py6F883nOWzR84l1TmVZgBYf_8_DfGzqnlhsNdmVaNTaL4fP0HL_4QUr4MiS-Lag7il_AfKp4VUxebAjhcKL9sTySn5-SSnMLR-TR03-5yCjqAx5PzMbXw1KnPXuUURAAdAzTYagvGSZFSkQoCXzF1fze03XgIKAwSrRLJmJwulN9zz4wiLqg4yenmNn4d0qxeB4NCadsmTmEVSDEEDHDyrjHYhxE6OmdS7Ea_IEgjbKvgrXMBodNxHTGMyoRpndex61Pmxv6Q1rZuHd1a4TFtj1FbBeFFn8Ko6s5D6xTCW4f2BnieeFEXXer7DY6hgo5wFMYEcEMMWmE6LT5CE1acs4AKghu8RPDCtrhZqZqrildihXVWcEZLnlW7VVfLsikznpWiyPJym1VKbSmtGlpSxartMV_pmlG2zTJGaZ7xbLfhlAkq8m1JKeWs4WRLsRfabIx57TfOtysdwoB1luUVK1dGNGjC-EeAsdFXwh-O3tmIVhHGCNunD9PBznga2T2ufJ3Q1s3QBrKlRocYrvhRR4P1pel0qb6sdN6jjHdVNp2chDGFapCT0ToQxlaDN3UX42k8QtkTYU-tjt3QbKTrCXtKZPPP-uTdfygjYU-jskDY0yzutWb_BwAA___pK4fj">