blob: 8c895af51676cfbcdf4aace2b741ab15527add8d [file] [log] [blame]
Joerg Sonnenberger244a5772015-03-04 14:25:35 +00001// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm < %s| FileCheck %s
2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm < %s| FileCheck %s
3// RUN: %clang_cc1 -triple powerpc-unknown-unknown -emit-llvm < %s| FileCheck %s
4// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -emit-llvm < %s| FileCheck %s
5
Daniel Jasper8dc4a2a2015-03-04 15:02:17 +00006// RUN: %clang_cc1 -triple arm-unknown-unknown -emit-llvm-only -verify %s
7// RUN: %clang_cc1 -triple aarch64-unknown-unknown -emit-llvm-only -verify %s
8// RUN: %clang_cc1 -triple mips-unknown-unknown -emit-llvm-only -verify %s
9// RUN: %clang_cc1 -triple mips64-unknown-unknown -emit-llvm-only -verify %s
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000010
11// Check that __builtin_longjmp and __builtin_setjmp are lowerd into
12// IR intrinsics on those architectures that can handle them.
13// Check that they are lowered to the libcalls on other architectures.
14
15typedef void *jmp_buf;
16jmp_buf buf;
17
Joerg Sonnenberger244a5772015-03-04 14:25:35 +000018// CHECK: define{{.*}} void @do_jump()
19// CHECK: call{{.*}} void @llvm.eh.sjlj.longjmp
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000020
Joerg Sonnenberger244a5772015-03-04 14:25:35 +000021// CHECK: define{{.*}} void @do_setjmp()
22// CHECK: call{{.*}} i32 @llvm.eh.sjlj.setjmp
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000023
24void do_jump(void) {
Joerg Sonnenberger244a5772015-03-04 14:25:35 +000025 __builtin_longjmp(buf, 1); // expected-error {{cannot compile this __builtin_longjmp yet}}
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000026}
27
28void f(void);
29
30void do_setjmp(void) {
31 if (!__builtin_setjmp(buf))
32 f();
33}