summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 983125f)
raw | patch | inline | side by side (parent: 983125f)
author | Reid Kleckner <reid@kleckner.net> | |
Wed, 14 Jan 2015 18:50:10 +0000 (18:50 +0000) | ||
committer | Reid Kleckner <reid@kleckner.net> | |
Wed, 14 Jan 2015 18:50:10 +0000 (18:50 +0000) |
This fixes lots of generic CodeGen tests that use __gcc_personality_v0.
This suggests that using ExceptionHandling::MSVC was a mistake, and we
should instead classify each function by personality function. This
would, for example, allow us to LTO a binary containing uses of SEH and
Itanium EH.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226019 91177308-0d34-0410-b5e6-96231b3b80d8
This suggests that using ExceptionHandling::MSVC was a mistake, and we
should instead classify each function by personality function. This
would, for example, allow us to LTO a binary containing uses of SEH and
Itanium EH.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226019 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/AsmPrinter/Win64Exception.cpp | patch | blob | history | |
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | patch | blob | history |
index 2138cb9514f82484333c7be5c52344698e40cb4b..84549ae95aefc2570cce95c2c71435f4f6513aa7 100644 (file)
// Emit an UNWIND_INFO struct describing the prologue.
Asm->OutStreamer.EmitWinEHHandlerData();
- // Emit either MSVC-compatible tables or the usual Itanium-style LSDA after
- // the UNWIND_INFO struct.
- if (Asm->MAI->getExceptionHandlingType() == ExceptionHandling::MSVC) {
- const Function *Per = MMI->getPersonalities()[MMI->getPersonalityIndex()];
- if (Per->getName() == "__C_specific_handler")
- emitCSpecificHandlerTable();
- else
- report_fatal_error(Twine("unexpected personality function: ") +
- Per->getName());
- } else {
+ // Emit the tables appropriate to the personality function in use. If we
+ // don't recognize the personality, assume it uses an Itanium-style LSDA.
+ const Function *Per = MMI->getPersonalities()[MMI->getPersonalityIndex()];
+ if (Per->getName() == "__C_specific_handler")
+ emitCSpecificHandlerTable();
+ else
emitExceptionTable();
- }
Asm->OutStreamer.PopSection();
}
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 4f031d3ff7e739c0c1f36ce0ba34d35b91ed68e4..90fcb62469155a0698c676557d04b106b1ef6a71 100644 (file)
*MBB, MBB->begin(), SDB->getCurDebugLoc(), TII->get(TargetOpcode::PHI),
FuncInfo->ExceptionSelectorVirtReg);
for (unsigned I = 0, E = LPadInst->getNumClauses(); I != E; ++I) {
+ // Skip filter clauses, we can't implement them yet.
+ if (LPadInst->isFilter(I))
+ continue;
+
MachineBasicBlock *ClauseBB = MF->CreateMachineBasicBlock(LLVMBB);
MF->insert(MBB, ClauseBB);