mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
237a621fb9
Summary: The pass incorrectly assumed if there's a longjmp declaration in the module, there is also a setjmp function declaration. Fixed it, and now the pass only converts longjmp and does not do any other transformation when there's no setjmp declaration in the module. Fixes PR39562. Reviewers: jgravelle-google, sbc100 Subscribers: dschuff, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D54273 llvm-svn: 346445
25 lines
815 B
LLVM
25 lines
815 B
LLVM
; RUN: opt < %s -wasm-lower-em-ehsjlj -S | FileCheck %s
|
|
|
|
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
|
|
target triple = "wasm32-unknown-unknown"
|
|
|
|
%struct.__jmp_buf_tag = type { [6 x i32], i32, %struct.__sigset_t }
|
|
%struct.__sigset_t = type { [32 x i32] }
|
|
|
|
@buffer = global [1 x %struct.__jmp_buf_tag] zeroinitializer, align 16
|
|
|
|
; Tests if program does not crash when there's no setjmp function calls in the
|
|
; module.
|
|
|
|
; CHECK: call void @emscripten_longjmp_jmpbuf
|
|
define void @longjmp_only() {
|
|
entry:
|
|
call void @longjmp(%struct.__jmp_buf_tag* getelementptr inbounds ([1 x %struct.__jmp_buf_tag], [1 x %struct.__jmp_buf_tag]* @buffer, i32 0, i32 0), i32 1) #1
|
|
unreachable
|
|
}
|
|
|
|
; Function Attrs: noreturn nounwind
|
|
declare void @longjmp(%struct.__jmp_buf_tag*, i32) #1
|
|
|
|
attributes #1 = { noreturn nounwind }
|