| // RUN: %clang_cc1 -x c %s -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s |
| // RUN: %clang_cc1 -x c++ %s -triple x86_64-linux-gnu -emit-llvm -o - | FileCheck %s |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| struct __jmp_buf_tag { int n; }; |
| int setjmp(struct __jmp_buf_tag*); |
| int sigsetjmp(struct __jmp_buf_tag*, int); |
| int _setjmp(struct __jmp_buf_tag*); |
| int __sigsetjmp(struct __jmp_buf_tag*, int); |
| |
| typedef struct __jmp_buf_tag jmp_buf[1]; |
| typedef struct __jmp_buf_tag sigjmp_buf[1]; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| void f() { |
| jmp_buf jb; |
| // CHECK: call {{.*}}@setjmp( |
| setjmp(jb); |
| // CHECK: call {{.*}}@sigsetjmp( |
| sigsetjmp(jb, 0); |
| // CHECK: call {{.*}}@_setjmp( |
| _setjmp(jb); |
| // CHECK: call {{.*}}@__sigsetjmp( |
| __sigsetjmp(jb, 0); |
| } |
| |
| // CHECK: ; Function Attrs: returns_twice |
| // CHECK-NEXT: declare {{.*}} @setjmp( |
| |
| // CHECK: ; Function Attrs: returns_twice |
| // CHECK-NEXT: declare {{.*}} @sigsetjmp( |
| |
| // CHECK: ; Function Attrs: returns_twice |
| // CHECK-NEXT: declare {{.*}} @_setjmp( |
| |
| // CHECK: ; Function Attrs: returns_twice |
| // CHECK-NEXT: declare {{.*}} @__sigsetjmp( |
| |