samestep added inline comments.

================
Comment at: clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp:248-258
+  for (unsigned ArgIndex = 0; ArgIndex < NumArgs; ++ParamIt, ++ArgIndex) {
     assert(ParamIt != FuncDecl->param_end());
 
-    const Expr *Arg = *ArgIt;
-    auto *ArgLoc = Env.getStorageLocation(*Arg, SkipPast::Reference);
+    const Expr *Arg;
+    if (const auto *ConstructExpr = dyn_cast<CXXConstructExpr>(Call)) {
+      Arg = ConstructExpr->getArg(ArgIndex);
+    } else if (const auto *NonConstructExpr = dyn_cast<CallExpr>(Call)) {
----------------
xazax.hun wrote:
> I think the more idiomatic solution in Clang is to create an ArrayRef for the 
> arguments from the `ConstructExpr` and the `CallExpr`. The args should be 
> stored in a continuous memory area in both cases so you should be able to 
> create the ArrayRef in constant time and you would no longer need to have 
> these pesky if statements in your loop. 
Ah OK, thanks! How should I do that? I was previously using iterators but it 
looked like the types were different between `CallExpr` and `CXXConstructExpr`, 
so I switched away from iterators in this patch; is there an easy way to make 
the `ArrayRef`?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D131438/new/

https://reviews.llvm.org/D131438

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to