aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
diff options
context:
space:
mode:
authormartinboehme <mboehme@google.com>2024-01-22 09:23:06 +0100
committerGitHub <noreply@github.com>2024-01-22 09:23:06 +0100
commita2caa4929e8e8a2ffff4ee5f03ab37a9be7462a0 (patch)
tree59d019a84dfc24503b09053a132ee932a49f30e7 /clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
parent3b943c0203df5c35089417567cc470d5cdbc497e (diff)
downloadllvm-a2caa4929e8e8a2ffff4ee5f03ab37a9be7462a0.zip
llvm-a2caa4929e8e8a2ffff4ee5f03ab37a9be7462a0.tar.gz
llvm-a2caa4929e8e8a2ffff4ee5f03ab37a9be7462a0.tar.bz2
[clang][dataflow] Treat comma operator correctly in `getResultObjectLocation()`. (#78427)
Diffstat (limited to 'clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp')
-rw-r--r--clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
index 07dc3a9..196a136 100644
--- a/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
+++ b/clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp
@@ -782,8 +782,13 @@ Environment::getResultObjectLocation(const Expr &RecordPRValue) const {
return Val->getLoc();
}
- // Expression nodes that propagate a record prvalue should have exactly one
- // child.
+ if (auto *Op = dyn_cast<BinaryOperator>(&RecordPRValue);
+ Op && Op->isCommaOp()) {
+ return getResultObjectLocation(*Op->getRHS());
+ }
+
+ // All other expression nodes that propagate a record prvalue should have
+ // exactly one child.
llvm::SmallVector<const Stmt *> children(RecordPRValue.child_begin(),
RecordPRValue.child_end());
assert(children.size() == 1);