https://llvm.org/bugs/show_bug.cgi?id=26361
Bug ID: 26361 Summary: [WinEH] cleanupret to cleanuppad doesn't execute next cleanuppad unless optimized Product: libraries Version: trunk Hardware: PC OS: All Status: NEW Severity: normal Priority: P Component: Interprocedural Optimizations Assignee: unassignedb...@nondot.org Reporter: a...@crichton.co CC: llvm-bugs@lists.llvm.org Classification: Unclassified In the following IR, the function foo has two cleanup pads, but when compiled without optimizations only one of them will be run. The return value of the program should always be 2, but it will be 1 if optimizations are disabled. If optimizations are enabled the `inc` function is inlined into the cleanup pads which enables to bug to not be exhibited. ; ModuleID = 'foo.ll' target triple = "i686-pc-windows-msvc" @LOG = global i32 0 declare x86_stdcallcc void @RaiseException(i32, i32, i32, i8*) declare i32 @_except_handler3(...) define void @foo() personality i32 (...)* @_except_handler3 { entry-block: invoke x86_stdcallcc void @RaiseException(i32 0, i32 0, i32 0, i8* null) to label %normal unwind label %unwind1 normal: ; preds = %entry-block unreachable unwind1: ; preds = %entry-block %pad1 = cleanuppad within none [] call void @inc() [ "funclet"(token %pad1) ] cleanupret from %pad1 unwind label %unwind2 unwind2: ; preds = %unwind1 %pad2 = cleanuppad within none [] call void @inc() [ "funclet"(token %pad2) ] cleanupret from %pad2 unwind to caller } define void @inc() { entry-block: %0 = load i32, i32* @LOG, align 4 %1 = add i32 %0, 1 store i32 %1, i32* @LOG, align 4 ret void } define i32 @main(i32, i8**) personality i32 (...)* @_except_handler3 { entry-block: invoke void @foo() to label %normal unwind label %catchswitch normal: ; preds = %entry-block ret i32 0 catchswitch: ; preds = %entry-block %catchswitch1 = catchswitch within none [label %catchpad] unwind to caller catchpad: ; preds = %catchswitch %catchpad2 = catchpad within %catchswitch1 [] catchret from %catchpad2 to label %check-return check-return: ; preds = %catchpad %2 = load i32, i32* @LOG, align 4 ret i32 %2 } -- You are receiving this mail because: You are on the CC list for the bug.
_______________________________________________ llvm-bugs mailing list llvm-bugs@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs