15 OS << VD->getNameAsString();
18 OS <<
"MaterializeTemporaryExpr at " << MTE;
20 if (
const auto *PVD = PB->getParmVarDecl())
21 OS <<
"$" << PVD->getNameAsString();
22 else if (PB->getImplicitThisParent())
24 else if (
const auto *FD = PB->getFieldDecl())
25 OS <<
"$this." << FD->getNameAsString();
27 OS <<
"NewAllocation at " << E;
29 llvm_unreachable(
"access path base invalid");
30 for (
const auto &E : Elements)
35 OS <<
getID() <<
" (Path: ";
41LoanManager::getOrCreatePlaceholderBase(
const ParmVarDecl *PVD) {
42 llvm::FoldingSetNodeID ID;
44 llvm::FoldingSetInsertToken InsertToken;
45 if (
PlaceholderBase *Existing = PlaceholderBases.lookup(ID, InsertToken))
50 PlaceholderBases.insert(NewPB, InsertToken);
54const PlaceholderBase *
55LoanManager::getOrCreatePlaceholderBase(
const CXXMethodDecl *MD) {
56 llvm::FoldingSetNodeID ID;
58 llvm::FoldingSetInsertToken InsertToken;
59 if (PlaceholderBase *Existing = PlaceholderBases.lookup(ID, InsertToken))
62 void *Mem = LoanAllocator.Allocate<PlaceholderBase>();
63 PlaceholderBase *NewPB =
new (Mem) PlaceholderBase(MD);
64 PlaceholderBases.insert(NewPB, InsertToken);
68const PlaceholderBase *
69LoanManager::getOrCreatePlaceholderBase(
const FieldDecl *FD) {
70 llvm::FoldingSetNodeID ID;
72 llvm::FoldingSetInsertToken InsertToken;
73 if (PlaceholderBase *Existing = PlaceholderBases.lookup(ID, InsertToken))
76 void *Mem = LoanAllocator.Allocate<PlaceholderBase>();
77 PlaceholderBase *NewPB =
new (Mem) PlaceholderBase(FD);
78 PlaceholderBases.insert(NewPB, InsertToken);
Represents a static or instance method of a struct/union/class.
Represents a member of a struct/union/class.
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
Represents a parameter to a function.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
const clang::CXXNewExpr * getAsNewAllocation() const
const clang::ValueDecl * getAsValueDecl() const
const clang::MaterializeTemporaryExpr * getAsMaterializeTemporaryExpr() const
const PlaceholderBase * getAsPlaceholderBase() const
void dump(llvm::raw_ostream &OS) const
void dump(llvm::raw_ostream &OS) const
Represents the base of a placeholder access path, which is a function parameter, the implicit 'this' ...
static void Profile(llvm::FoldingSetNodeID &ID, KeyTy ParamMethodOrField)