mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-26 07:56:43 +00:00
[WinEH] Ignore filter clauses while mapping landing pad blocks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235656 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
173a68d4a2
commit
3ad4bc1445
@ -1666,6 +1666,12 @@ void WinEHPrepare::mapLandingPadBlocks(LandingPadInst *LPad,
|
||||
while (HandlersFound != NumClauses) {
|
||||
BasicBlock *NextBB = nullptr;
|
||||
|
||||
// Skip over filter clauses.
|
||||
if (LPad->isFilter(HandlersFound)) {
|
||||
++HandlersFound;
|
||||
continue;
|
||||
}
|
||||
|
||||
// See if the clause we're looking for is a catch-all.
|
||||
// If so, the catch begins immediately.
|
||||
Constant *ExpectedSelector = LPad->getClause(HandlersFound)->stripPointerCasts();
|
||||
|
21
test/CodeGen/X86/seh-filter.ll
Normal file
21
test/CodeGen/X86/seh-filter.ll
Normal file
@ -0,0 +1,21 @@
|
||||
; RUN: llc -O0 -mtriple=x86_64-windows-msvc < %s | FileCheck %s
|
||||
|
||||
declare void @g()
|
||||
define void @f() {
|
||||
invoke void @g() to label %return unwind label %lpad
|
||||
|
||||
return:
|
||||
ret void
|
||||
|
||||
lpad:
|
||||
%ehptrs = landingpad {i8*, i32} personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
filter [0 x i8*] zeroinitializer
|
||||
call void @__cxa_call_unexpected(i8* null)
|
||||
unreachable
|
||||
}
|
||||
declare i32 @__C_specific_handler(...)
|
||||
declare void @__cxa_call_unexpected(i8*)
|
||||
|
||||
; We don't emit entries for filters.
|
||||
; CHECK: .seh_handlerdata
|
||||
; CHECK: .long 0
|
Loading…
x
Reference in New Issue
Block a user