From 1b3dd3527ee717a55641a5fd1a85f7ac6aa1c857 Mon Sep 17 00:00:00 2001 From: Mark Seaborn Date: Sun, 8 Dec 2013 00:51:21 +0000 Subject: 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. llvm-svn: 196711 --- llvm/lib/Transforms/Utils/InlineFunction.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'llvm/lib/Transforms/Utils') diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp index 405f77e793f..e35a1d0b006 100644 --- a/llvm/lib/Transforms/Utils/InlineFunction.cpp +++ b/llvm/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){ -- cgit v1.2.3