blob: 75c91b8374ff2b27ec311bae6370dafc4b895a79 [file] [log] [blame]
Stephen Hines0e2c34f2015-03-23 12:09:02 -07001// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm < %s| FileCheck %s -check-prefix=SUPPORTED
2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm < %s| FileCheck %s -check-prefix=SUPPORTED
3// RUN: %clang_cc1 -triple powerpc-unknown-unknown -emit-llvm < %s| FileCheck %s -check-prefix=SUPPORTED
4// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -emit-llvm < %s| FileCheck %s -check-prefix=SUPPORTED
5// RUN: %clang_cc1 -triple arm-unknown-unknown -emit-llvm < %s| FileCheck %s -check-prefix=UNSUPPORTED
6// RUN: %clang_cc1 -triple aarch64-unknown-unknown -emit-llvm < %s| FileCheck %s -check-prefix=UNSUPPORTED
7// RUN: %clang_cc1 -triple mips-unknown-unknown -emit-llvm < %s| FileCheck %s -check-prefix=UNSUPPORTED
8// RUN: %clang_cc1 -triple mips64-unknown-unknown -emit-llvm < %s| FileCheck %s -check-prefix=UNSUPPORTED
9
10// Check that __builtin_longjmp and __builtin_setjmp are lowerd into
11// IR intrinsics on those architectures that can handle them.
12// Check that they are lowered to the libcalls on other architectures.
13
14typedef void *jmp_buf;
15jmp_buf buf;
16
17// SUPPORTED: define{{.*}} void @do_jump()
18// SUPPORTED: call{{.*}} void @llvm.eh.sjlj.longjmp
19// UNSUPPORTED: define{{.*}} void @do_jump()
20// UNSUPPORTED: call{{.*}} void @longjmp
21
22// SUPPORTED: define{{.*}} void @do_setjmp()
23// SUPPORTED: call{{.*}} i32 @llvm.eh.sjlj.setjmp
24// UNSUPPORTED: define{{.*}} void @do_setjmp()
25// UNSUPPORTED: call{{.*}} i32 @setjmp
26
27void do_jump(void) {
28 __builtin_longjmp(buf, 1);
29}
30
31void f(void);
32
33void do_setjmp(void) {
34 if (!__builtin_setjmp(buf))
35 f();
36}