60 lines · c
1// RUN: %clang_cc1 -x c %s -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s2// RUN: %clang_cc1 -x c %s -triple x86_64-linux-gnu -emit-llvm -fno-builtin -o - | FileCheck %s3// RUN: %clang_cc1 -x c++ %s -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s4 5#ifdef __cplusplus6extern "C" {7#endif8 9struct __jmp_buf_tag { int n; };10struct __ucontext_t_tag { int n; };11int setjmp(struct __jmp_buf_tag*);12int sigsetjmp(struct __jmp_buf_tag*, int);13int _setjmp(struct __jmp_buf_tag*);14int __sigsetjmp(struct __jmp_buf_tag*, int);15int _setjmpex(struct __jmp_buf_tag* env);16int getcontext(struct __ucontext_t_tag*);17 18typedef struct __jmp_buf_tag jmp_buf[1];19typedef struct __jmp_buf_tag sigjmp_buf[1];20typedef struct __ucontext_t_tag ucontext_t[1];21 22#ifdef __cplusplus23}24#endif25 26void f(void) {27 jmp_buf jb;28 ucontext_t ut;29 // CHECK: call {{.*}}@setjmp(30 setjmp(jb);31 // CHECK: call {{.*}}@sigsetjmp(32 sigsetjmp(jb, 0);33 // CHECK: call {{.*}}@_setjmp(34 _setjmp(jb);35 // CHECK: call {{.*}}@__sigsetjmp(36 __sigsetjmp(jb, 0);37 // CHECK: call {{.*}}@_setjmpex(38 _setjmpex(jb);39 // CHECK: call {{.*}}@getcontext(40 getcontext(ut);41}42 43// CHECK: ; Function Attrs: returns_twice44// CHECK-NEXT: declare {{.*}} @setjmp(45 46// CHECK: ; Function Attrs: returns_twice47// CHECK-NEXT: declare {{.*}} @sigsetjmp(48 49// CHECK: ; Function Attrs: returns_twice50// CHECK-NEXT: declare {{.*}} @_setjmp(51 52// CHECK: ; Function Attrs: returns_twice53// CHECK-NEXT: declare {{.*}} @__sigsetjmp(54 55// CHECK: ; Function Attrs: returns_twice56// CHECK-NEXT: declare {{.*}} @_setjmpex(57 58// CHECK: ; Function Attrs: returns_twice59// CHECK-NEXT: declare {{.*}} @getcontext(60