forked from OSchip/llvm-project
Add PushConditionalTempDestruction/PopConditionalTempDestruction.
llvm-svn: 72835
This commit is contained in:
parent
8936009a91
commit
44bfcf0f97
|
@ -67,3 +67,14 @@ CodeGenFunction::EmitCXXExprWithTemporaries(const CXXExprWithTemporaries *E,
|
||||||
|
|
||||||
return RV;
|
return RV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeGenFunction::PushConditionalTempDestruction() {
|
||||||
|
// Store the current number of live temporaries.
|
||||||
|
ConditionalTempDestructionStack.push_back(LiveTemporaries.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CodeGenFunction::PopConditionalTempDestruction() {
|
||||||
|
ConditionalTempDestructionStack.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,20 @@ public:
|
||||||
/// this behavior for branches?
|
/// this behavior for branches?
|
||||||
void EmitBranchThroughCleanup(llvm::BasicBlock *Dest);
|
void EmitBranchThroughCleanup(llvm::BasicBlock *Dest);
|
||||||
|
|
||||||
|
/// PushConditionalTempDestruction - Should be called before a conditional
|
||||||
|
/// part of an expression is emitted. For example, before the RHS of the
|
||||||
|
/// expression below is emitted:
|
||||||
|
///
|
||||||
|
/// b && f(T());
|
||||||
|
///
|
||||||
|
/// This is used to make sure that any temporaryes created in the conditional
|
||||||
|
/// branch are only destroyed if the branch is taken.
|
||||||
|
void PushConditionalTempDestruction();
|
||||||
|
|
||||||
|
/// PopConditionalTempDestruction - Should be called after a conditional
|
||||||
|
/// part of an expression has been emitted.
|
||||||
|
void PopConditionalTempDestruction();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CGDebugInfo* DebugInfo;
|
CGDebugInfo* DebugInfo;
|
||||||
|
|
||||||
|
@ -264,6 +278,11 @@ private:
|
||||||
|
|
||||||
llvm::SmallVector<CXXLiveTemporaryInfo, 4> LiveTemporaries;
|
llvm::SmallVector<CXXLiveTemporaryInfo, 4> LiveTemporaries;
|
||||||
|
|
||||||
|
/// ConditionalTempDestructionStack - Contains the number of live temporaries
|
||||||
|
/// when PushConditionalTempDestruction was called. This is used so that
|
||||||
|
/// we know how many temporaries were created by a certain expression.
|
||||||
|
llvm::SmallVector<size_t, 4> ConditionalTempDestructionStack;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CodeGenFunction(CodeGenModule &cgm);
|
CodeGenFunction(CodeGenModule &cgm);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue