mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 00:16:25 +00:00
[X86] Make sure startproc/endproc are paired
We used different conditions to determine if we should emit startproc vs endproc. Use the same condition to ensure that they will always be paired. This fixes PR24374. llvm-svn: 247435
This commit is contained in:
parent
5caec8e071
commit
3ea3b025ac
@ -172,7 +172,7 @@ void WinException::endFunction(const MachineFunction *MF) {
|
||||
Asm->OutStreamer->PopSection();
|
||||
}
|
||||
|
||||
if (shouldEmitMoves)
|
||||
if (shouldEmitMoves || shouldEmitPersonality)
|
||||
Asm->OutStreamer->EmitWinCFIEndProc();
|
||||
}
|
||||
|
||||
|
37
test/CodeGen/X86/pr24374.ll
Normal file
37
test/CodeGen/X86/pr24374.ll
Normal file
@ -0,0 +1,37 @@
|
||||
; RUN: llc < %s | FileCheck %s
|
||||
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-w64-windows-gnu"
|
||||
|
||||
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @g, i8* null }]
|
||||
|
||||
declare i32 @__gxx_personality_seh0(...)
|
||||
|
||||
; Function Attrs: nounwind
|
||||
define void @f() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_seh0 to i8*) {
|
||||
entry:
|
||||
invoke void @g()
|
||||
to label %exit unwind label %lpad
|
||||
|
||||
lpad: ; preds = %entry
|
||||
landingpad { i8*, i32 }
|
||||
cleanup
|
||||
unreachable
|
||||
|
||||
exit: ; preds = %entry
|
||||
unreachable
|
||||
}
|
||||
; CHECK-LABEL: f:
|
||||
; CHECK: .seh_proc f
|
||||
; CHECK: .seh_handler __gxx_personality_seh0, @unwind, @except
|
||||
; CHECK: callq g
|
||||
; CHECK: .seh_handlerdata
|
||||
; CHECK: .seh_endproc
|
||||
|
||||
define void @g() {
|
||||
unreachable
|
||||
}
|
||||
; CHECK-LABEL: g:
|
||||
; CHECK: .seh_proc g
|
||||
; CHECK: .seh_endproc
|
||||
|
||||
attributes #0 = { nounwind }
|
Loading…
Reference in New Issue
Block a user