Commit c3ab51cd authored by Tom Stellard's avatar Tom Stellard
Browse files

Merging r247435:

------------------------------------------------------------------------
r247435 | david.majnemer | 2015-09-11 13:34:34 -0400 (Fri, 11 Sep 2015) | 8 lines

[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: 253742
parent 99224f9e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ void WinException::endFunction(const MachineFunction *MF) {
    Asm->OutStreamer->PopSection();
  }

  if (shouldEmitMoves)
  if (shouldEmitMoves || shouldEmitPersonality)
    Asm->OutStreamer->EmitWinCFIEndProc();
}

+37 −0
Original line number Diff line number Diff line
; 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 }