Skip to content

Commit 83b9302

Browse files
committed
[NFC] Rename and document acquire<SymExprT, ...> member function
Following review suggestions
1 parent 3ed3a34 commit 83b9302

File tree

6 files changed

+30
-26
lines changed

6 files changed

+30
-26
lines changed

clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,13 +527,17 @@ class SymbolManager {
527527

528528
static bool canSymbolicate(QualType T);
529529

530-
template <typename T, typename... Args> const T *get(Args &&...args);
530+
/// Create or retrieve a SymExpr of type \p SymExprT for the given arguments.
531+
/// Use the arguments to check for an existing SymExpr and return it,
532+
/// otherwise, create a new one and keep a pointer to it to avoid duplicates.
533+
template <typename SymExprT, typename... Args>
534+
const SymExprT *acquire(Args &&...args);
531535

532536
const SymbolConjured *conjureSymbol(const Stmt *E,
533537
const LocationContext *LCtx, QualType T,
534538
unsigned VisitCount,
535539
const void *SymbolTag = nullptr) {
536-
return get<SymbolConjured>(E, LCtx, T, VisitCount, SymbolTag);
540+
return acquire<SymbolConjured>(E, LCtx, T, VisitCount, SymbolTag);
537541
}
538542

539543
const SymbolConjured* conjureSymbol(const Expr *E,
@@ -675,7 +679,7 @@ class SymbolVisitor {
675679
};
676680

677681
template <typename T, typename... Args>
678-
const T *SymbolManager::get(Args &&...args) {
682+
const T *SymbolManager::acquire(Args &&...args) {
679683
llvm::FoldingSetNodeID profile;
680684
T::Profile(profile, std::forward<Args>(args)...);
681685
void *InsertPos;

clang/lib/StaticAnalyzer/Core/MemRegion.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ DefinedOrUnknownSVal MemRegionManager::getStaticSize(const MemRegion *MR,
811811
switch (SR->getKind()) {
812812
case MemRegion::AllocaRegionKind:
813813
case MemRegion::SymbolicRegionKind:
814-
return nonloc::SymbolVal(SymMgr.get<SymbolExtent>(SR));
814+
return nonloc::SymbolVal(SymMgr.acquire<SymbolExtent>(SR));
815815
case MemRegion::StringRegionKind:
816816
return SVB.makeIntVal(
817817
cast<StringRegion>(SR)->getStringLiteral()->getByteLength() + 1,
@@ -829,7 +829,7 @@ DefinedOrUnknownSVal MemRegionManager::getStaticSize(const MemRegion *MR,
829829
case MemRegion::ObjCStringRegionKind: {
830830
QualType Ty = cast<TypedValueRegion>(SR)->getDesugaredValueType(Ctx);
831831
if (isa<VariableArrayType>(Ty))
832-
return nonloc::SymbolVal(SymMgr.get<SymbolExtent>(SR));
832+
return nonloc::SymbolVal(SymMgr.acquire<SymbolExtent>(SR));
833833

834834
if (Ty->isIncompleteType())
835835
return UnknownVal();
@@ -897,7 +897,7 @@ DefinedOrUnknownSVal MemRegionManager::getStaticSize(const MemRegion *MR,
897897
case MemRegion::BlockDataRegionKind:
898898
case MemRegion::BlockCodeRegionKind:
899899
case MemRegion::FunctionCodeRegionKind:
900-
return nonloc::SymbolVal(SymMgr.get<SymbolExtent>(SR));
900+
return nonloc::SymbolVal(SymMgr.acquire<SymbolExtent>(SR));
901901
default:
902902
llvm_unreachable("Unhandled region");
903903
}

clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,7 +1471,7 @@ class SymbolicRangeInferrer
14711471
return getRangeForNegatedExpr(
14721472
[SSE, State = this->State]() -> SymbolRef {
14731473
if (SSE->getOpcode() == BO_Sub)
1474-
return State->getSymbolManager().get<SymSymExpr>(
1474+
return State->getSymbolManager().acquire<SymSymExpr>(
14751475
SSE->getRHS(), BO_Sub, SSE->getLHS(), SSE->getType());
14761476
return nullptr;
14771477
},
@@ -1481,7 +1481,7 @@ class SymbolicRangeInferrer
14811481
std::optional<RangeSet> getRangeForNegatedSym(SymbolRef Sym) {
14821482
return getRangeForNegatedExpr(
14831483
[Sym, State = this->State]() {
1484-
return State->getSymbolManager().get<UnarySymExpr>(Sym, UO_Minus,
1484+
return State->getSymbolManager().acquire<UnarySymExpr>(Sym, UO_Minus,
14851485
Sym->getType());
14861486
},
14871487
Sym->getType());
@@ -1495,7 +1495,7 @@ class SymbolicRangeInferrer
14951495
if (!IsCommutative)
14961496
return std::nullopt;
14971497

1498-
SymbolRef Commuted = State->getSymbolManager().get<SymSymExpr>(
1498+
SymbolRef Commuted = State->getSymbolManager().acquire<SymSymExpr>(
14991499
SSE->getRHS(), Op, SSE->getLHS(), SSE->getType());
15001500
if (const RangeSet *Range = getConstraint(State, Commuted))
15011501
return *Range;
@@ -1540,15 +1540,15 @@ class SymbolicRangeInferrer
15401540

15411541
// Let's find an expression e.g. (x < y).
15421542
BinaryOperatorKind QueriedOP = OperatorRelationsTable::getOpFromIndex(i);
1543-
const SymSymExpr *SymSym = SymMgr.get<SymSymExpr>(LHS, QueriedOP, RHS, T);
1543+
const SymSymExpr *SymSym = SymMgr.acquire<SymSymExpr>(LHS, QueriedOP, RHS, T);
15441544
const RangeSet *QueriedRangeSet = getConstraint(State, SymSym);
15451545

15461546
// If ranges were not previously found,
15471547
// try to find a reversed expression (y > x).
15481548
if (!QueriedRangeSet) {
15491549
const BinaryOperatorKind ROP =
15501550
BinaryOperator::reverseComparisonOp(QueriedOP);
1551-
SymSym = SymMgr.get<SymSymExpr>(RHS, ROP, LHS, T);
1551+
SymSym = SymMgr.acquire<SymSymExpr>(RHS, ROP, LHS, T);
15521552
QueriedRangeSet = getConstraint(State, SymSym);
15531553
}
15541554

clang/lib/StaticAnalyzer/Core/RangedConstraintManager.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ ProgramStateRef RangedConstraintManager::assumeSym(ProgramStateRef State,
6262

6363
SymbolManager &SymMgr = getSymbolManager();
6464
QualType DiffTy = SymMgr.getContext().getPointerDiffType();
65-
SymbolRef Subtraction = SymMgr.get<SymSymExpr>(SSE->getRHS(), BO_Sub,
65+
SymbolRef Subtraction = SymMgr.acquire<SymSymExpr>(SSE->getRHS(), BO_Sub,
6666
SSE->getLHS(), DiffTy);
6767

6868
const llvm::APSInt &Zero = getBasicVals().getValue(0, DiffTy);
@@ -76,7 +76,7 @@ ProgramStateRef RangedConstraintManager::assumeSym(ProgramStateRef State,
7676
SymbolManager &SymMgr = getSymbolManager();
7777

7878
QualType ExprType = SSE->getType();
79-
SymbolRef CanonicalEquality = SymMgr.get<SymSymExpr>(
79+
SymbolRef CanonicalEquality = SymMgr.acquire<SymSymExpr>(
8080
SSE->getLHS(), BO_EQ, SSE->getRHS(), ExprType);
8181

8282
bool WasEqual = SSE->getOpcode() == BO_EQ;

clang/lib/StaticAnalyzer/Core/SValBuilder.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,30 +79,30 @@ nonloc::SymbolVal SValBuilder::makeNonLoc(const SymExpr *lhs,
7979
APSIntPtr rhs, QualType type) {
8080
assert(lhs);
8181
assert(!Loc::isLocType(type));
82-
return nonloc::SymbolVal(SymMgr.get<SymIntExpr>(lhs, op, rhs, type));
82+
return nonloc::SymbolVal(SymMgr.acquire<SymIntExpr>(lhs, op, rhs, type));
8383
}
8484

8585
nonloc::SymbolVal SValBuilder::makeNonLoc(APSIntPtr lhs,
8686
BinaryOperator::Opcode op,
8787
const SymExpr *rhs, QualType type) {
8888
assert(rhs);
8989
assert(!Loc::isLocType(type));
90-
return nonloc::SymbolVal(SymMgr.get<IntSymExpr>(lhs, op, rhs, type));
90+
return nonloc::SymbolVal(SymMgr.acquire<IntSymExpr>(lhs, op, rhs, type));
9191
}
9292

9393
nonloc::SymbolVal SValBuilder::makeNonLoc(const SymExpr *lhs,
9494
BinaryOperator::Opcode op,
9595
const SymExpr *rhs, QualType type) {
9696
assert(lhs && rhs);
9797
assert(!Loc::isLocType(type));
98-
return nonloc::SymbolVal(SymMgr.get<SymSymExpr>(lhs, op, rhs, type));
98+
return nonloc::SymbolVal(SymMgr.acquire<SymSymExpr>(lhs, op, rhs, type));
9999
}
100100

101101
NonLoc SValBuilder::makeNonLoc(const SymExpr *operand, UnaryOperator::Opcode op,
102102
QualType type) {
103103
assert(operand);
104104
assert(!Loc::isLocType(type));
105-
return nonloc::SymbolVal(SymMgr.get<UnarySymExpr>(operand, op, type));
105+
return nonloc::SymbolVal(SymMgr.acquire<UnarySymExpr>(operand, op, type));
106106
}
107107

108108
nonloc::SymbolVal SValBuilder::makeNonLoc(const SymExpr *operand,
@@ -111,7 +111,7 @@ nonloc::SymbolVal SValBuilder::makeNonLoc(const SymExpr *operand,
111111
assert(!Loc::isLocType(toTy));
112112
if (fromTy == toTy)
113113
return nonloc::SymbolVal(operand);
114-
return nonloc::SymbolVal(SymMgr.get<SymbolCast>(operand, fromTy, toTy));
114+
return nonloc::SymbolVal(SymMgr.acquire<SymbolCast>(operand, fromTy, toTy));
115115
}
116116

117117
SVal SValBuilder::convertToArrayIndex(SVal val) {
@@ -143,7 +143,7 @@ SValBuilder::getRegionValueSymbolVal(const TypedValueRegion *region) {
143143
if (!SymbolManager::canSymbolicate(T))
144144
return UnknownVal();
145145

146-
SymbolRef sym = SymMgr.get<SymbolRegionValue>(region);
146+
SymbolRef sym = SymMgr.acquire<SymbolRegionValue>(region);
147147

148148
if (Loc::isLocType(T))
149149
return loc::MemRegionVal(MemMgr.getSymbolicRegion(sym));
@@ -245,7 +245,7 @@ DefinedSVal SValBuilder::getMetadataSymbolVal(const void *symbolTag,
245245
assert(SymbolManager::canSymbolicate(type) && "Invalid metadata symbol type");
246246

247247
SymbolRef sym =
248-
SymMgr.get<SymbolMetadata>(region, expr, type, LCtx, count, symbolTag);
248+
SymMgr.acquire<SymbolMetadata>(region, expr, type, LCtx, count, symbolTag);
249249

250250
if (Loc::isLocType(type))
251251
return loc::MemRegionVal(MemMgr.getSymbolicRegion(sym));
@@ -264,7 +264,7 @@ SValBuilder::getDerivedRegionValueSymbolVal(SymbolRef parentSymbol,
264264
if (!SymbolManager::canSymbolicate(T))
265265
return UnknownVal();
266266

267-
SymbolRef sym = SymMgr.get<SymbolDerived>(parentSymbol, region);
267+
SymbolRef sym = SymMgr.acquire<SymbolDerived>(parentSymbol, region);
268268

269269
if (Loc::isLocType(T))
270270
return loc::MemRegionVal(MemMgr.getSymbolicRegion(sym));
@@ -724,7 +724,7 @@ class EvalCastVisitor : public SValVisitor<EvalCastVisitor, SVal> {
724724
// because there are no generic region address metadata
725725
// symbols to use, only content metadata.
726726
return nonloc::SymbolVal(
727-
VB.getSymbolManager().get<SymbolExtent>(FTR));
727+
VB.getSymbolManager().acquire<SymbolExtent>(FTR));
728728

729729
if (const SymbolicRegion *SymR = R->getSymbolicBase()) {
730730
SymbolRef Sym = SymR->getSymbol();

clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,16 +328,16 @@ static NonLoc doRearrangeUnchecked(ProgramStateRef State,
328328
// FIXME: Maybe it'd be better to have consistency in
329329
// "$x - $y" vs. "$y - $x" because those are solver's keys.
330330
if (LInt > RInt) {
331-
ResultSym = SymMgr.get<SymSymExpr>(RSym, BO_Sub, LSym, SymTy);
331+
ResultSym = SymMgr.acquire<SymSymExpr>(RSym, BO_Sub, LSym, SymTy);
332332
ResultOp = BinaryOperator::reverseComparisonOp(Op);
333333
ResultInt = LInt - RInt; // Opposite order!
334334
} else {
335-
ResultSym = SymMgr.get<SymSymExpr>(LSym, BO_Sub, RSym, SymTy);
335+
ResultSym = SymMgr.acquire<SymSymExpr>(LSym, BO_Sub, RSym, SymTy);
336336
ResultOp = Op;
337337
ResultInt = RInt - LInt; // Opposite order!
338338
}
339339
} else {
340-
ResultSym = SymMgr.get<SymSymExpr>(LSym, Op, RSym, SymTy);
340+
ResultSym = SymMgr.acquire<SymSymExpr>(LSym, Op, RSym, SymTy);
341341
ResultInt = (Op == BO_Add) ? (LInt + RInt) : (LInt - RInt);
342342
ResultOp = BO_Add;
343343
// Bring back the cosmetic difference.
@@ -350,7 +350,7 @@ static NonLoc doRearrangeUnchecked(ProgramStateRef State,
350350
}
351351
}
352352
APSIntPtr PersistentResultInt = BV.getValue(ResultInt);
353-
return nonloc::SymbolVal(SymMgr.get<SymIntExpr>(
353+
return nonloc::SymbolVal(SymMgr.acquire<SymIntExpr>(
354354
ResultSym, ResultOp, PersistentResultInt, ResultTy));
355355
}
356356

0 commit comments

Comments
 (0)