Add PushConditionalTempDestruction/PopConditionalTempDestruction.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72835 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index c91a052..72c4aa4 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -160,6 +160,20 @@
/// this behavior for branches?
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:
CGDebugInfo* DebugInfo;
@@ -263,6 +277,11 @@
};
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:
CodeGenFunction(CodeGenModule &cgm);