Store more information about live temporaries. No functionality change for now.
llvm-svn: 72793
This commit is contained in:
parent
82aea737a7
commit
6d36343ed8
|
@ -17,7 +17,7 @@ using namespace CodeGen;
|
||||||
|
|
||||||
void CodeGenFunction::PushCXXTemporary(const CXXTemporary *Temporary,
|
void CodeGenFunction::PushCXXTemporary(const CXXTemporary *Temporary,
|
||||||
llvm::Value *Ptr) {
|
llvm::Value *Ptr) {
|
||||||
LiveTemporaries.push_back(Temporary);
|
LiveTemporaries.push_back(CXXLiveTemporaryInfo(Temporary, Ptr, 0, 0));
|
||||||
|
|
||||||
// Make a cleanup scope and emit the destructor.
|
// Make a cleanup scope and emit the destructor.
|
||||||
{
|
{
|
||||||
|
@ -40,7 +40,7 @@ CodeGenFunction::EmitCXXExprWithTemporaries(const CXXExprWithTemporaries *E,
|
||||||
|
|
||||||
// Go through the temporaries backwards.
|
// Go through the temporaries backwards.
|
||||||
for (unsigned i = E->getNumTemporaries(); i != 0; --i) {
|
for (unsigned i = E->getNumTemporaries(); i != 0; --i) {
|
||||||
assert(LiveTemporaries.back() == E->getTemporary(i - 1));
|
assert(LiveTemporaries.back().Temporary == E->getTemporary(i - 1));
|
||||||
LiveTemporaries.pop_back();
|
LiveTemporaries.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -239,7 +239,30 @@ private:
|
||||||
/// 'this' declaration.
|
/// 'this' declaration.
|
||||||
ImplicitParamDecl *CXXThisDecl;
|
ImplicitParamDecl *CXXThisDecl;
|
||||||
|
|
||||||
llvm::SmallVector<const CXXTemporary*, 4> LiveTemporaries;
|
/// CXXLiveTemporaryInfo - Holds information about a live C++ temporary.
|
||||||
|
struct CXXLiveTemporaryInfo {
|
||||||
|
/// Temporary - The live temporary.
|
||||||
|
const CXXTemporary *Temporary;
|
||||||
|
|
||||||
|
/// ThisPtr - The pointer to the temporary.
|
||||||
|
llvm::Value *ThisPtr;
|
||||||
|
|
||||||
|
/// DtorBlock - The destructor block.
|
||||||
|
llvm::BasicBlock *DtorBlock;
|
||||||
|
|
||||||
|
/// CondPtr - If this is a conditional temporary, this is the pointer to
|
||||||
|
/// the condition variable that states whether the destructor should be
|
||||||
|
/// called or not.
|
||||||
|
llvm::Value *CondPtr;
|
||||||
|
|
||||||
|
CXXLiveTemporaryInfo(const CXXTemporary *temporary,
|
||||||
|
llvm::Value *thisptr, llvm::Value *condptr,
|
||||||
|
llvm::BasicBlock *dtorblock)
|
||||||
|
: Temporary(temporary), ThisPtr(thisptr), DtorBlock(dtorblock),
|
||||||
|
CondPtr(condptr) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
llvm::SmallVector<CXXLiveTemporaryInfo, 4> LiveTemporaries;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CodeGenFunction(CodeGenModule &cgm);
|
CodeGenFunction(CodeGenModule &cgm);
|
||||||
|
|
Loading…
Reference in New Issue