Store more information about live temporaries. No functionality change for now.

llvm-svn: 72793
This commit is contained in:
Anders Carlsson 2009-06-03 18:54:26 +00:00
parent 82aea737a7
commit 6d36343ed8
2 changed files with 26 additions and 3 deletions

View File

@ -17,7 +17,7 @@ using namespace CodeGen;
void CodeGenFunction::PushCXXTemporary(const CXXTemporary *Temporary,
llvm::Value *Ptr) {
LiveTemporaries.push_back(Temporary);
LiveTemporaries.push_back(CXXLiveTemporaryInfo(Temporary, Ptr, 0, 0));
// Make a cleanup scope and emit the destructor.
{
@ -40,7 +40,7 @@ CodeGenFunction::EmitCXXExprWithTemporaries(const CXXExprWithTemporaries *E,
// Go through the temporaries backwards.
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();
}

View File

@ -239,7 +239,30 @@ private:
/// 'this' declaration.
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:
CodeGenFunction(CodeGenModule &cgm);