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

    <tr>
        <th>Summary</th>
        <td>
            [clang] RecursiveASTVisitor processes `T1_ = memcpy(d, s, n);` but skips `T1_ = memcpy(d, s, (size_t)n);`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    https://gist.github.com/MaskRay/9574d2e4676a6eb5cbd76bf71fbe98c9

```
# or point CMAKE_PREFIX_PATH to a build directory of the main branch
cmake -GNinja -S. -Bout/release -DCMAKE_PREFIX_PATH=~/llvm-prebuilt/clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04
ninja -C out/release
```

```
// test/var.c
#include <string.h>

void cp(void *d, void *s, size_t n) {
  void* T1_;
 T1_ = memcpy(d, s, (size_t)n);
  T1_ = memcpy(d, s, n);
}
```
```
% out/release/cminify -f main test/var.c
#include <string.h>

void a(void *d, void *s, size_t n) {
void *o;
T1_= memcpy(d, s, (size_t)n);
o= memcpy(d, s, n);
}
```

Note that `memcpy(d, s, (size_t)n);` is not processed (the user-provided `VisitDeclRefExpr` is not called).

I think the bug is in `RecursiveASTVisitor<Derived>::TraverseStmt` (`clang/include/clang/AST/RecursiveASTVisitor.h`): `TRY_TO(dataTraverseNode(CurrS, &LocalQueue));` does not add `clang::BinaryOperator` (`=`) of `T1_= memcpy(d, s, (size_t)n);` (with a `-CStyleCastExpr`) to `LocalQueue`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyklUtv4zYQxz8NfSEkUJRMSQcfFDtqF-0-GhtFezIocmRxI4sCH27cQz97QclJvLtGt8ECgRDS_P9n5sfHcGvVYQBYoeUdWm4W3LtOm9V7bh8f-HnRaHledc6NFqUVojWi9UFZFx-U63wTC31EtL4sRrQul3kmKWQsZ5xBsxSNzFnT5knbQFmIEpENItXly8jlbx7SFGuDR60Gh9fvq1_u958e7ut3f-w_VbufsdOY48arXmKpDAinzRnrFrsO8JGrATeGD6KbvcSRPwKOfvqghs8cR9sYR3faO0RrAz1wCzjafBMCpZt_EK37_nSMRgMhVlCIng8HRO-m-WQZk5hFTwXbsyzq1eCfosPgI9_4wfkoKWKSzSkMc-g1_iLu7cpv4wissQMb5CduYvHCSQ2i9xIwStfWGTUc4g6l99dmJ60kFiOixfQfopVEdI2fBzYMrPob9g4PiJYY5XezEE9rEK3wLtmj9Hl2l-wxSjf4CEcxnhEtJrvJBtFidkK0DF6vov9SfbES5ZvbDL5GsvyKJq3FUQ2qPeOonU_Bj_Dib8f1vEK_1DJhexso_UOMpu8H7QC7jjuMGPmfsRnByuJBOzwaLcBaCKUU4UJ5CyYajT4pGSYZ-V1Z5TYg-gdo759GcyUWvO9BIlrG1wm9w65Tw-N0PRt_CIvVEJweQHhj1Qmq7W5y1Qal6w0YdQIZdiWtUFrtDD-BsbB1RxdiIVogRi5Xsb7s5-vlrKvtDtH6hnfcBVKh4CpE3z38ud99DGi4489BPujgVay9MdsZFvtVC97_5sFD0L7wkhrmormcsMzhp4zv1MDN-eMIhoeSXnJG6WbOIDxWIYM3nY_Z5i_lOsyDOlpv3bmHNbfusg3B2enw21XOjMQLuUplmZZ8AauE5WnOSlaQRbcSWZYUopUpl00rZCkIb9qSyiLPG9o2fKFWlNCUJMmSFCShJM5LDglr8yJjSSYZQRmBI1d9HJ7EWJvDQlnrYcUIybJFzxvo7dROKL3sDw2dxaymJ7TxB4sy0ivr7KuDU66fetCsWG7wjc18Oaj2QvJ7rwsjuPEO20c1fk9ym_7Cm_6b9nfV-UL-rz1DfwYRXp8Jh0W0noj8GwAA__-LPiZj">