xazax.hun 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)) {
----------------
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.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D131438/new/
https://reviews.llvm.org/D131438
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits