xref: /llvm-project/clang/test/CodeGen/setjmp.c (revision adc402bf3d0565ac2bc7efbdd05f0d846e818041)
1 // RUN: %clang_cc1 -x c %s -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s
2 // RUN: %clang_cc1 -x c++ %s -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 struct __jmp_buf_tag { int n; };
9 int setjmp(struct __jmp_buf_tag*);
10 int sigsetjmp(struct __jmp_buf_tag*, int);
11 int _setjmp(struct __jmp_buf_tag*);
12 int __sigsetjmp(struct __jmp_buf_tag*, int);
13 
14 typedef struct __jmp_buf_tag jmp_buf[1];
15 typedef struct __jmp_buf_tag sigjmp_buf[1];
16 
17 #ifdef __cplusplus
18 }
19 #endif
20 
f(void)21 void f(void) {
22   jmp_buf jb;
23   // CHECK: call {{.*}}@setjmp(
24   setjmp(jb);
25   // CHECK: call {{.*}}@sigsetjmp(
26   sigsetjmp(jb, 0);
27   // CHECK: call {{.*}}@_setjmp(
28   _setjmp(jb);
29   // CHECK: call {{.*}}@__sigsetjmp(
30   __sigsetjmp(jb, 0);
31 }
32 
33 // CHECK: ; Function Attrs: returns_twice
34 // CHECK-NEXT: declare {{.*}} @setjmp(
35 
36 // CHECK: ; Function Attrs: returns_twice
37 // CHECK-NEXT: declare {{.*}} @sigsetjmp(
38 
39 // CHECK: ; Function Attrs: returns_twice
40 // CHECK-NEXT: declare {{.*}} @_setjmp(
41 
42 // CHECK: ; Function Attrs: returns_twice
43 // CHECK-NEXT: declare {{.*}} @__sigsetjmp(
44 
45