aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/X86/X86WinEHState.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-01-29 05:33:15 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-01-29 05:33:15 +0000
commitf2bb710da516001a14ce9074c5ca1b8313426bce (patch)
tree999fdea58b78269b7e0bdffffd669abe9b5f2df2 /llvm/lib/Target/X86/X86WinEHState.cpp
parent4661c610be1e5074359a0afdf77d76a76882141f (diff)
downloadllvm-f2bb710da516001a14ce9074c5ca1b8313426bce.zip
llvm-f2bb710da516001a14ce9074c5ca1b8313426bce.tar.gz
llvm-f2bb710da516001a14ce9074c5ca1b8313426bce.tar.bz2
[WinEH] Don't perform state stores in cleanups
Our cleanups do not support true lexical nesting of funclets which obviates the need to perform state stores. This fixes PR26361. llvm-svn: 259161
Diffstat (limited to 'llvm/lib/Target/X86/X86WinEHState.cpp')
-rw-r--r--llvm/lib/Target/X86/X86WinEHState.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86WinEHState.cpp b/llvm/lib/Target/X86/X86WinEHState.cpp
index dce94a9..ee5da31 100644
--- a/llvm/lib/Target/X86/X86WinEHState.cpp
+++ b/llvm/lib/Target/X86/X86WinEHState.cpp
@@ -425,6 +425,10 @@ void WinEHStatePass::addStateStores(Function &F, WinEHFuncInfo &FuncInfo) {
BasicBlock *FuncletEntryBB = BBColors.front();
if (auto *FuncletPad =
dyn_cast<FuncletPadInst>(FuncletEntryBB->getFirstNonPHI())) {
+ // We do not support nesting funclets within cleanuppads.
+ if (isa<CleanupPadInst>(FuncletPad))
+ continue;
+
auto BaseStateI = FuncInfo.FuncletBaseStateMap.find(FuncletPad);
if (BaseStateI != FuncInfo.FuncletBaseStateMap.end())
BaseState = BaseStateI->second;