@@ -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+
179191private:
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