17 OS <<
"Decl: " << VD->getNameAsString();
19 OS <<
"Expr: " << E->getStmtClassName();
26 AllOrigins.emplace_back(ID, &D);
27 return AllOrigins.back();
31 AllOrigins.emplace_back(ID, &E);
32 return AllOrigins.back();
37 auto It = ExprToOriginID.find(&E);
38 if (It != ExprToOriginID.end())
44 if (
const auto *DRE = dyn_cast<DeclRefExpr>(&E))
45 return get(*DRE->getDecl());
53 auto It = DeclToOriginID.find(&D);
57 if (It == DeclToOriginID.end())
64 auto It = ExprToOriginID.find(&E);
65 if (It != ExprToOriginID.end())
70 ExprToOriginID[&E] = NewID;
75 assert(ID.Value < AllOrigins.size());
76 return AllOrigins[ID.Value];
80 auto It = DeclToOriginID.find(&D);
81 if (It != DeclToOriginID.end())
85 DeclToOriginID[&D] = NewID;
This represents one expression.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
const Origin & getOrigin(OriginID ID) const
OriginID getOrCreate(const Expr &E)
void dump(OriginID OID, llvm::raw_ostream &OS) const
Origin & addOrigin(OriginID ID, const clang::ValueDecl &D)
OriginID get(const Expr &E)
utils::ID< struct OriginTag > OriginID
An Origin is a symbolic identifier that represents the set of possible loans a pointer-like object co...
const clang::Expr * getExpr() const
const clang::ValueDecl * getDecl() const