Author: Lang Hames Date: 2025-02-08T16:19:54Z New Revision: b3876b698d0a7b4c2c61f94fc2d0877a7dfd8e20
URL: https://github.com/llvm/llvm-project/commit/b3876b698d0a7b4c2c61f94fc2d0877a7dfd8e20 DIFF: https://github.com/llvm/llvm-project/commit/b3876b698d0a7b4c2c61f94fc2d0877a7dfd8e20.diff LOG: [JITLink] Add missing testcase for compact-unwind-needs-dwarf. This testcase was accidentally left out of 9d88ffe7f7b. (cherry picked from commit 7a213e70eb24e621042f2fda043622048cb1f1df) Added: llvm/test/ExecutionEngine/Orc/throw-catch-no-frame-pointer.ll Modified: Removed: ################################################################################ diff --git a/llvm/test/ExecutionEngine/Orc/throw-catch-no-frame-pointer.ll b/llvm/test/ExecutionEngine/Orc/throw-catch-no-frame-pointer.ll new file mode 100644 index 000000000000000..8032e71ad2f35c3 --- /dev/null +++ b/llvm/test/ExecutionEngine/Orc/throw-catch-no-frame-pointer.ll @@ -0,0 +1,51 @@ +; REQUIRES: system-darwin && host-unwind-supports-jit +; RUN: lli -jit-kind=orc %s +; +; Check that we can throw exceptions from no-fp functions. On systems that +; support compact-unwind this implicitly tests that we correctly handle +; unwind-info records that depend on DWARF FDEs. + +@_ZTIi = external constant ptr + +declare ptr @__cxa_allocate_exception(i64) +declare void @__cxa_throw(ptr, ptr, ptr) +declare ptr @__cxa_begin_catch(ptr) +declare void @__cxa_end_catch() +declare i32 @__gxx_personality_v0(...) +declare i32 @llvm.eh.typeid.for.p0(ptr) + +define void @_Z3foov() "frame-pointer"="none" { +entry: + %exception = tail call ptr @__cxa_allocate_exception(i64 4) + store i32 42, ptr %exception + tail call void @__cxa_throw(ptr %exception, ptr nonnull @_ZTIi, ptr null) + unreachable +} + +define i32 @main(i32 %argc, ptr %argv) "frame-pointer"="all" personality ptr @__gxx_personality_v0 { +entry: + invoke void @_Z3foov() + to label %return.unreachable unwind label %lpad + +lpad: + %0 = landingpad { ptr, i32 } + catch ptr @_ZTIi + %1 = extractvalue { ptr, i32 } %0, 1 + %2 = tail call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIi) + %matches = icmp eq i32 %1, %2 + br i1 %matches, label %catch, label %eh.resume + +catch: + %3 = extractvalue { ptr, i32 } %0, 0 + %4 = tail call ptr @__cxa_begin_catch(ptr %3) + %5 = load i32, ptr %4 + %sub = sub nsw i32 42, %5 + tail call void @__cxa_end_catch() + ret i32 %sub + +return.unreachable: + unreachable + +eh.resume: + resume { ptr, i32 } %0 +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits