@@ -1010,6 +1010,8 @@ class ThreadSafetyAnalyzer {
1010
1010
ThreadSafetyHandler &Handler;
1011
1011
const CXXMethodDecl *CurrentMethod;
1012
1012
LocalVariableMap LocalVarMap;
1013
+ // Maps constructed objects to `this` placeholder prior to initialization.
1014
+ llvm::SmallDenseMap<const Expr *, til::LiteralPtr *> ConstructedObjects;
1013
1015
FactManager FactMan;
1014
1016
std::vector<CFGBlockInfo> BlockInfo;
1015
1017
@@ -1528,8 +1530,6 @@ class BuildLockset : public ConstStmtVisitor<BuildLockset> {
1528
1530
1529
1531
ThreadSafetyAnalyzer *Analyzer;
1530
1532
FactSet FSet;
1531
- // / Maps constructed objects to `this` placeholder prior to initialization.
1532
- llvm::SmallDenseMap<const Expr *, til::LiteralPtr *> ConstructedObjects;
1533
1533
LocalVariableMap::Context LVarCtx;
1534
1534
unsigned CtxIndex;
1535
1535
@@ -1790,7 +1790,7 @@ void BuildLockset::handleCall(const Expr *Exp, const NamedDecl *D,
1790
1790
std::pair<til::LiteralPtr *, StringRef> Placeholder =
1791
1791
Analyzer->SxBuilder .createThisPlaceholder (Exp);
1792
1792
[[maybe_unused]] auto inserted =
1793
- ConstructedObjects.insert ({Exp, Placeholder.first });
1793
+ Analyzer-> ConstructedObjects .insert ({Exp, Placeholder.first });
1794
1794
assert (inserted.second && " Are we visiting the same expression again?" );
1795
1795
if (isa<CXXConstructExpr>(Exp))
1796
1796
Self = Placeholder.first ;
@@ -2109,10 +2109,10 @@ void BuildLockset::VisitDeclStmt(const DeclStmt *S) {
2109
2109
E = EWC->getSubExpr ()->IgnoreParens ();
2110
2110
E = UnpackConstruction (E);
2111
2111
2112
- if (auto Object = ConstructedObjects.find (E);
2113
- Object != ConstructedObjects.end ()) {
2112
+ if (auto Object = Analyzer-> ConstructedObjects .find (E);
2113
+ Object != Analyzer-> ConstructedObjects .end ()) {
2114
2114
Object->second ->setClangDecl (VD);
2115
- ConstructedObjects.erase (Object);
2115
+ Analyzer-> ConstructedObjects .erase (Object);
2116
2116
}
2117
2117
}
2118
2118
}
@@ -2121,11 +2121,11 @@ void BuildLockset::VisitDeclStmt(const DeclStmt *S) {
2121
2121
void BuildLockset::VisitMaterializeTemporaryExpr (
2122
2122
const MaterializeTemporaryExpr *Exp) {
2123
2123
if (const ValueDecl *ExtD = Exp->getExtendingDecl ()) {
2124
- if (auto Object =
2125
- ConstructedObjects. find ( UnpackConstruction (Exp->getSubExpr ()));
2126
- Object != ConstructedObjects.end ()) {
2124
+ if (auto Object = Analyzer-> ConstructedObjects . find (
2125
+ UnpackConstruction (Exp->getSubExpr ()));
2126
+ Object != Analyzer-> ConstructedObjects .end ()) {
2127
2127
Object->second ->setClangDecl (ExtD);
2128
- ConstructedObjects.erase (Object);
2128
+ Analyzer-> ConstructedObjects .erase (Object);
2129
2129
}
2130
2130
}
2131
2131
}
@@ -2419,15 +2419,15 @@ void ThreadSafetyAnalyzer::runAnalysis(AnalysisDeclContext &AC) {
2419
2419
2420
2420
// Clean up constructed object even if there are no attributes to
2421
2421
// keep the number of objects in limbo as small as possible.
2422
- if (auto Object = LocksetBuilder. ConstructedObjects .find (
2422
+ if (auto Object = ConstructedObjects.find (
2423
2423
TD.getBindTemporaryExpr ()->getSubExpr ());
2424
- Object != LocksetBuilder. ConstructedObjects .end ()) {
2424
+ Object != ConstructedObjects.end ()) {
2425
2425
const auto *DD = TD.getDestructorDecl (AC.getASTContext ());
2426
2426
if (DD->hasAttrs ())
2427
2427
// TODO: the location here isn't quite correct.
2428
2428
LocksetBuilder.handleCall (nullptr , DD, Object->second ,
2429
2429
TD.getBindTemporaryExpr ()->getEndLoc ());
2430
- LocksetBuilder. ConstructedObjects .erase (Object);
2430
+ ConstructedObjects.erase (Object);
2431
2431
}
2432
2432
break ;
2433
2433
}
0 commit comments