aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGTemporaries.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2010-03-30 03:14:41 +0000
committerAnders Carlsson <andersca@mac.com>2010-03-30 03:14:41 +0000
commit44ec82b4a1597802f5bf17721481b8c265bc8dc5 (patch)
treecc475fb567863c6fdd4ed2d39c9180925eb9531b /lib/CodeGen/CGTemporaries.cpp
parent46bbf8d352fcd615420c5759a112ccd6e61516ad (diff)
Introduce a CXXTemporariesCleanupScope RAII object and use it to cleanup the temporaries code.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99865 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGTemporaries.cpp')
-rw-r--r--lib/CodeGen/CGTemporaries.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/CodeGen/CGTemporaries.cpp b/lib/CodeGen/CGTemporaries.cpp
index bed843966e..6d38ab98de 100644
--- a/lib/CodeGen/CGTemporaries.cpp
+++ b/lib/CodeGen/CGTemporaries.cpp
@@ -127,15 +127,14 @@ CodeGenFunction::EmitCXXExprWithTemporaries(const CXXExprWithTemporaries *E,
size_t CleanupStackDepth = CleanupEntries.size();
(void) CleanupStackDepth;
- unsigned OldNumLiveTemporaries = LiveTemporaries.size();
-
- RValue RV = EmitAnyExpr(E->getSubExpr(), AggLoc, IsAggLocVolatile,
- /*IgnoreResult=*/false, IsInitializer);
-
- // Pop temporaries.
- while (LiveTemporaries.size() > OldNumLiveTemporaries)
- PopCXXTemporary();
+ RValue RV;
+
+ {
+ CXXTemporariesCleanupScope Scope(*this);
+ RV = EmitAnyExpr(E->getSubExpr(), AggLoc, IsAggLocVolatile,
+ /*IgnoreResult=*/false, IsInitializer);
+ }
assert(CleanupEntries.size() == CleanupStackDepth &&
"Cleanup size mismatch!");