[PATCH] D145286: [WinEH] Fix issue of dynamic alloca in try block
LuoYuanke via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 3 16:31:39 PST 2023
LuoYuanke created this revision.
Herald added subscribers: pengfei, hiraditya.
Herald added a project: All.
LuoYuanke requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D145286
Files:
llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
llvm/test/CodeGen/X86/wineh-dyn-alloca.ll
Index: llvm/test/CodeGen/X86/wineh-dyn-alloca.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/X86/wineh-dyn-alloca.ll
@@ -0,0 +1,42 @@
+; RUN: llc -mtriple=x86_64-pc-windows-msvc19 -verify-machineinstrs < %s | FileCheck %s
+
+%struct.widget = type { ptr, ptr, [8 x i8] }
+
+ at global = external global %struct.widget
+
+define dso_local void @hoist() local_unnamed_addr #0 personality ptr @__CxxFrameHandler3 {
+bb:
+ br i1 poison, label %bb1, label %bb7
+
+; CHECK:.Ltmp0:
+; CHECK: subq $32, %rsp
+; CHECK: callq snork
+; CHECK: addq $32, %rsp
+bb1: ; preds = %bb
+ %tmp = alloca i32, align 4
+ invoke void @snork()
+ to label %bb6 unwind label %bb2
+
+bb2: ; preds = %bb1
+ %tmp3 = catchswitch within none [label %bb4] unwind label %bb8
+
+bb4: ; preds = %bb2
+ %tmp5 = catchpad within %tmp3 [ptr @global, i32 0, ptr %tmp]
+ unreachable
+
+bb6: ; preds = %bb1
+ unreachable
+
+bb7: ; preds = %bb
+ ret void
+
+bb8: ; preds = %bb2
+ %tmp9 = cleanuppad within none []
+ unreachable
+}
+
+declare dso_local i32 @__CxxFrameHandler3(...) #0
+
+declare dso_local void @snork() local_unnamed_addr #0
+
+attributes #0 = { nofree }
Index: llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
+++ llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
@@ -111,7 +111,8 @@
// Map all BB references in the WinEH data to MBBs.
for (WinEHTryBlockMapEntry &TBME : EHInfo.TryBlockMap) {
for (WinEHHandlerType &H : TBME.HandlerArray) {
- if (const AllocaInst *AI = H.CatchObj.Alloca)
+ const AllocaInst *AI = H.CatchObj.Alloca;
+ if (AI && AI->isStaticAlloca())
CatchObjects.insert({AI, {}}).first->second.push_back(
&H.CatchObj.FrameIndex);
else
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D145286.502310.patch
Type: text/x-patch
Size: 2181 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230304/d6d6e80d/attachment.bin>
More information about the llvm-commits
mailing list