diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-01-29 05:33:15 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-01-29 05:33:15 +0000 |
commit | f2bb710da516001a14ce9074c5ca1b8313426bce (patch) | |
tree | 999fdea58b78269b7e0bdffffd669abe9b5f2df2 /llvm/lib/Target/X86/X86WinEHState.cpp | |
parent | 4661c610be1e5074359a0afdf77d76a76882141f (diff) | |
download | llvm-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.cpp | 4 |
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; |