diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-06-03 18:54:26 +0000 | 
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-06-03 18:54:26 +0000 | 
| commit | 6d36343ed8ab32ffdb536b37f38a24bed4bfabc0 (patch) | |
| tree | 860f8ea4ef32a590d8a3b7efb7f685f4d094a602 | |
| parent | 82aea737a7b2e714b759536350e1b5cdb1f811c9 (diff) | |
| download | bcm5719-llvm-6d36343ed8ab32ffdb536b37f38a24bed4bfabc0.tar.gz bcm5719-llvm-6d36343ed8ab32ffdb536b37f38a24bed4bfabc0.zip | |
Store more information about live temporaries. No functionality change for now.
llvm-svn: 72793
| -rw-r--r-- | clang/lib/CodeGen/CGCXXTemp.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 25 | 
2 files changed, 26 insertions, 3 deletions
| diff --git a/clang/lib/CodeGen/CGCXXTemp.cpp b/clang/lib/CodeGen/CGCXXTemp.cpp index 4511078e1d1..59ed3bbc60f 100644 --- a/clang/lib/CodeGen/CGCXXTemp.cpp +++ b/clang/lib/CodeGen/CGCXXTemp.cpp @@ -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();    } diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index b7894a4068a..97ca81bc2b9 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -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); | 

