blob: d80208f82c67b4b21898c4f084f4b7d9c0b453a8 [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
Reid Kleckner533bd172015-03-04 19:24:16 +00003// RUN: %clang_cc1 -triple x86_64-windows -emit-llvm < %s| FileCheck %s
Joerg Sonnenberger244a5772015-03-04 14:25:35 +00004// RUN: %clang_cc1 -triple powerpc-unknown-unknown -emit-llvm < %s| FileCheck %s
5// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -emit-llvm < %s| FileCheck %s
Chris Dewhurstfe9e5092016-06-15 16:08:13 +00006// RUN: %clang_cc1 -triple sparc-eabi-unknown -emit-llvm < %s | FileCheck %s
Joerg Sonnenberger244a5772015-03-04 14:25:35 +00007
Daniel Jasper8dc4a2a2015-03-04 15:02:17 +00008// RUN: %clang_cc1 -triple aarch64-unknown-unknown -emit-llvm-only -verify %s
9// RUN: %clang_cc1 -triple mips-unknown-unknown -emit-llvm-only -verify %s
10// RUN: %clang_cc1 -triple mips64-unknown-unknown -emit-llvm-only -verify %s
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000011
Joerg Sonnenberger27173282015-03-11 23:46:32 +000012// Check that __builtin_longjmp and __builtin_setjmp are lowered into
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000013// IR intrinsics on those architectures that can handle them.
Joerg Sonnenberger27173282015-03-11 23:46:32 +000014// Check that an error is created otherwise.
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000015
16typedef void *jmp_buf;
17jmp_buf buf;
18
Joerg Sonnenberger244a5772015-03-04 14:25:35 +000019// CHECK: define{{.*}} void @do_jump()
20// CHECK: call{{.*}} void @llvm.eh.sjlj.longjmp
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000021
Joerg Sonnenberger244a5772015-03-04 14:25:35 +000022// CHECK: define{{.*}} void @do_setjmp()
23// CHECK: call{{.*}} i32 @llvm.eh.sjlj.setjmp
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000024
25void do_jump(void) {
Joerg Sonnenberger27173282015-03-11 23:46:32 +000026 __builtin_longjmp(buf, 1); // expected-error {{__builtin_longjmp is not supported for the current target}}
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000027}
28
29void f(void);
30
31void do_setjmp(void) {
Joerg Sonnenberger27173282015-03-11 23:46:32 +000032 if (!__builtin_setjmp(buf)) // expected-error {{__builtin_setjmp is not supported for the current target}}
Joerg Sonnenberger096feeb2015-02-23 20:23:47 +000033 f();
34}