Skip to content

Commit a6889af

Browse files
committed
Add decl/expr name to Origin's debug output
1 parent 2eac6ae commit a6889af

File tree

2 files changed

+111
-90
lines changed

2 files changed

+111
-90
lines changed

clang/lib/Analysis/LifetimeSafety.cpp

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,18 @@ class OriginManager {
176176
return NewID;
177177
}
178178

179+
void dump(OriginID OID, llvm::raw_ostream &OS) const {
180+
OS << OID << " (";
181+
Origin O = getOrigin(OID);
182+
if (const ValueDecl *VD = O.getDecl())
183+
OS << "Decl: " << VD->getNameAsString();
184+
else if (const Expr *E = O.getExpr())
185+
OS << "Expr: " << E->getStmtClassName();
186+
else
187+
OS << "Unknown";
188+
OS << ")";
189+
}
190+
179191
private:
180192
OriginID getNextOriginID() { return NextOriginID++; }
181193

@@ -223,7 +235,7 @@ class Fact {
223235
return nullptr;
224236
}
225237

226-
virtual void dump(llvm::raw_ostream &OS) const {
238+
virtual void dump(llvm::raw_ostream &OS, const OriginManager &) const {
227239
OS << "Fact (Kind: " << static_cast<int>(K) << ")\n";
228240
}
229241
};
@@ -238,9 +250,10 @@ class IssueFact : public Fact {
238250
IssueFact(LoanID LID, OriginID OID) : Fact(Kind::Issue), LID(LID), OID(OID) {}
239251
LoanID getLoanID() const { return LID; }
240252
OriginID getOriginID() const { return OID; }
241-
void dump(llvm::raw_ostream &OS) const override {
242-
OS << "Issue (LoanID: " << getLoanID() << ", OriginID: " << getOriginID()
243-
<< ")\n";
253+
void dump(llvm::raw_ostream &OS, const OriginManager &OM) const override {
254+
OS << "Issue (LoanID: " << getLoanID() << ", ToOrigin: ";
255+
OM.dump(getOriginID(), OS);
256+
OS << ")\n";
244257
}
245258
};
246259

@@ -257,7 +270,7 @@ class ExpireFact : public Fact {
257270
LoanID getLoanID() const { return LID; }
258271
SourceLocation getExpiryLoc() const { return ExpiryLoc; }
259272

260-
void dump(llvm::raw_ostream &OS) const override {
273+
void dump(llvm::raw_ostream &OS, const OriginManager &OM) const override {
261274
OS << "Expire (LoanID: " << getLoanID() << ")\n";
262275
}
263276
};
@@ -275,9 +288,12 @@ class AssignOriginFact : public Fact {
275288
: Fact(Kind::AssignOrigin), OIDDest(OIDDest), OIDSrc(OIDSrc) {}
276289
OriginID getDestOriginID() const { return OIDDest; }
277290
OriginID getSrcOriginID() const { return OIDSrc; }
278-
void dump(llvm::raw_ostream &OS) const override {
279-
OS << "AssignOrigin (DestID: " << getDestOriginID()
280-
<< ", SrcID: " << getSrcOriginID() << ")\n";
291+
void dump(llvm::raw_ostream &OS, const OriginManager &OM) const override {
292+
OS << "AssignOrigin (Dest: ";
293+
OM.dump(getDestOriginID(), OS);
294+
OS << ", Src: ";
295+
OM.dump(getSrcOriginID(), OS);
296+
OS << ")\n";
281297
}
282298
};
283299

@@ -291,8 +307,10 @@ class ReturnOfOriginFact : public Fact {
291307

292308
ReturnOfOriginFact(OriginID OID) : Fact(Kind::ReturnOfOrigin), OID(OID) {}
293309
OriginID getReturnedOriginID() const { return OID; }
294-
void dump(llvm::raw_ostream &OS) const override {
295-
OS << "ReturnOfOrigin (OriginID: " << getReturnedOriginID() << ")\n";
310+
void dump(llvm::raw_ostream &OS, const OriginManager &OM) const override {
311+
OS << "ReturnOfOrigin (";
312+
OM.dump(getReturnedOriginID(), OS);
313+
OS << ")\n";
296314
}
297315
};
298316

@@ -309,8 +327,10 @@ class UseFact : public Fact {
309327
OriginID getUsedOrigin() const { return UsedOrigin; }
310328
const Expr *getUseExpr() const { return UseExpr; }
311329

312-
void dump(llvm::raw_ostream &OS) const override {
313-
OS << "Use (OriginID: " << UsedOrigin << ")\n";
330+
void dump(llvm::raw_ostream &OS, const OriginManager &OM) const override {
331+
OS << "Use (";
332+
OM.dump(getUsedOrigin(), OS);
333+
OS << ")\n";
314334
}
315335
};
316336

@@ -327,7 +347,7 @@ class TestPointFact : public Fact {
327347

328348
StringRef getAnnotation() const { return Annotation; }
329349

330-
void dump(llvm::raw_ostream &OS) const override {
350+
void dump(llvm::raw_ostream &OS, const OriginManager &) const override {
331351
OS << "TestPoint (Annotation: \"" << getAnnotation() << "\")\n";
332352
}
333353
};
@@ -366,7 +386,7 @@ class FactManager {
366386
if (It != BlockToFactsMap.end()) {
367387
for (const Fact *F : It->second) {
368388
llvm::dbgs() << " ";
369-
F->dump(llvm::dbgs());
389+
F->dump(llvm::dbgs(), OriginMgr);
370390
}
371391
}
372392
llvm::dbgs() << " End of Block\n";

0 commit comments

Comments
 (0)