[clang] 8bc8fc6 - [clang][dataflow] Use `Strict` accessors in TypeErasedDataflowAnalysis.cpp.
Martin Braenne via cfe-commits
cfe-commits at lists.llvm.org
Sun May 21 23:51:27 PDT 2023
Author: Martin Braenne
Date: 2023-05-22T06:51:12Z
New Revision: 8bc8fc65c9b20de6ffad63d7ce6734c145265cc2
URL: https://github.com/llvm/llvm-project/commit/8bc8fc65c9b20de6ffad63d7ce6734c145265cc2
DIFF: https://github.com/llvm/llvm-project/commit/8bc8fc65c9b20de6ffad63d7ce6734c145265cc2.diff
LOG: [clang][dataflow] Use `Strict` accessors in TypeErasedDataflowAnalysis.cpp.
This patch is part of the ongoing migration to strict handling of value categories (see https://discourse.llvm.org/t/70086 for details).
Depends On D150655
Reviewed By: sammccall, ymandel, xazax.hun
Differential Revision: https://reviews.llvm.org/D150656
Added:
Modified:
clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp
Removed:
################################################################################
diff --git a/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp b/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp
index 2e9893e78fa7..4fc8f27ffc9b 100644
--- a/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp
+++ b/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp
@@ -123,13 +123,10 @@ class TerminatorVisitor
private:
TerminatorVisitorRetTy extendFlowCondition(const Expr &Cond) {
// The terminator sub-expression might not be evaluated.
- if (Env.getStorageLocation(Cond, SkipPast::None) == nullptr)
+ if (Env.getValueStrict(Cond) == nullptr)
transfer(StmtToEnv, Cond, Env);
- // FIXME: The flow condition must be an r-value, so `SkipPast::None` should
- // suffice.
- auto *Val =
- cast_or_null<BoolValue>(Env.getValue(Cond, SkipPast::Reference));
+ auto *Val = cast_or_null<BoolValue>(Env.getValueStrict(Cond));
// Value merging depends on flow conditions from
diff erent environments
// being mutually exclusive -- that is, they cannot both be true in their
// entirety (even if they may share some clauses). So, we need *some* value
@@ -303,18 +300,14 @@ builtinTransferInitializer(const CFGInitializer &Elt,
auto *InitStmt = Init->getInit();
assert(InitStmt != nullptr);
- auto *InitStmtLoc = Env.getStorageLocation(*InitStmt, SkipPast::Reference);
- if (InitStmtLoc == nullptr)
- return;
-
- auto *InitStmtVal = Env.getValue(*InitStmtLoc);
- if (InitStmtVal == nullptr)
- return;
-
if (Member->getType()->isReferenceType()) {
+ auto *InitStmtLoc = Env.getStorageLocationStrict(*InitStmt);
+ if (InitStmtLoc == nullptr)
+ return;
+
auto &MemberLoc = ThisLoc.getChild(*Member);
Env.setValue(MemberLoc, Env.create<ReferenceValue>(*InitStmtLoc));
- } else {
+ } else if (auto *InitStmtVal = Env.getValueStrict(*InitStmt)) {
auto &MemberLoc = ThisLoc.getChild(*Member);
Env.setValue(MemberLoc, *InitStmtVal);
}
More information about the cfe-commits
mailing list