summaryrefslogtreecommitdiff
path: root/lib/Transforms/Utils/InlineFunction.cpp
diff options
context:
space:
mode:
authorMark Seaborn <mseaborn@chromium.org>2013-12-08 00:51:21 +0000
committerMark Seaborn <mseaborn@chromium.org>2013-12-08 00:51:21 +0000
commit34005c92bb2feacee642f54f7a8fa1e6df49403c (patch)
tree05ed05a78621191e19bd88b5fe9109a90be16eca /lib/Transforms/Utils/InlineFunction.cpp
parent615f9b7162ac6444c9e45042477634b73ba8850a (diff)
downloadllvm-34005c92bb2feacee642f54f7a8fa1e6df49403c.tar.gz
llvm-34005c92bb2feacee642f54f7a8fa1e6df49403c.tar.bz2
llvm-34005c92bb2feacee642f54f7a8fa1e6df49403c.tar.xz
Fix inlining to not lose the "cleanup" clause from landingpads
This fixes PR17872. This bug can lead to C++ destructors not being called when they should be, when an exception is thrown. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196711 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/InlineFunction.cpp')
-rw-r--r--lib/Transforms/Utils/InlineFunction.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/Transforms/Utils/InlineFunction.cpp b/lib/Transforms/Utils/InlineFunction.cpp
index 405f77e793..e35a1d0b00 100644
--- a/lib/Transforms/Utils/InlineFunction.cpp
+++ b/lib/Transforms/Utils/InlineFunction.cpp
@@ -238,6 +238,8 @@ static void HandleInlinedInvoke(InvokeInst *II, BasicBlock *FirstNewBlock,
InlinedLPad->reserveClauses(OuterNum);
for (unsigned OuterIdx = 0; OuterIdx != OuterNum; ++OuterIdx)
InlinedLPad->addClause(OuterLPad->getClause(OuterIdx));
+ if (OuterLPad->isCleanup())
+ InlinedLPad->setCleanup(true);
}
for (Function::iterator BB = FirstNewBlock, E = Caller->end(); BB != E; ++BB){