[llvm] r247435 - [X86] Make sure startproc/endproc are paired
David Majnemer via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 11 10:34:34 PDT 2015
Author: majnemer
Date: Fri Sep 11 12:34:34 2015
New Revision: 247435
URL: http://llvm.org/viewvc/llvm-project?rev=247435&view=rev
Log:
[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.
Added:
llvm/trunk/test/CodeGen/X86/pr24374.ll
Modified:
llvm/trunk/lib/CodeGen/AsmPrinter/WinException.cpp
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/WinException.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/WinException.cpp?rev=247435&r1=247434&r2=247435&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/WinException.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/WinException.cpp Fri Sep 11 12:34:34 2015
@@ -172,7 +172,7 @@ void WinException::endFunction(const Mac
Asm->OutStreamer->PopSection();
}
- if (shouldEmitMoves)
+ if (shouldEmitMoves || shouldEmitPersonality)
Asm->OutStreamer->EmitWinCFIEndProc();
}
Added: llvm/trunk/test/CodeGen/X86/pr24374.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pr24374.ll?rev=247435&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/pr24374.ll (added)
+++ llvm/trunk/test/CodeGen/X86/pr24374.ll Fri Sep 11 12:34:34 2015
@@ -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"
+
+ at 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 }
More information about the llvm-commits
mailing list