blob: 49230fa721e0f7091a0e15d728e3702e09c9abe5 [file] [log] [blame] [edit]
// RUN: %clang_cc1 -triple x86_64-windows-msvc -std=gnu23 -fdefer-ts -fsyntax-only -fblocks -verify %s
typedef void** jmp_buf;
typedef void** sigjmp_buf;
int setjmp(jmp_buf env);
int _setjmp(jmp_buf env);
int sigsetjmp(sigjmp_buf env, int savesigs);
int __sigsetjmp(sigjmp_buf env, int savesigs);
void longjmp(jmp_buf env, int val);
void _longjmp(jmp_buf env, int val);
void siglongjmp(sigjmp_buf env, int val);
jmp_buf x;
sigjmp_buf y;
void f() {
_Defer {
__builtin_setjmp(x); // expected-error {{cannot use '__builtin_setjmp' inside a defer statement}}
__builtin_longjmp(x, 1); // expected-error {{cannot use '__builtin_longjmp' inside a defer statement}}
setjmp(x); // expected-error {{cannot use 'setjmp' inside a defer statement}}
_setjmp(x); // expected-error {{cannot use '_setjmp' inside a defer statement}}
sigsetjmp(y, 0); // expected-error {{cannot use 'sigsetjmp' inside a defer statement}}
__sigsetjmp(y, 0); // expected-error {{cannot use '__sigsetjmp' inside a defer statement}}
longjmp(x, 0); // expected-error {{cannot use 'longjmp' inside a defer statement}}
_longjmp(x, 0); // expected-error {{cannot use '_longjmp' inside a defer statement}}
siglongjmp(y, 0); // expected-error {{cannot use 'siglongjmp' inside a defer statement}}
(void) ^{
__builtin_setjmp(x);
__builtin_longjmp(x, 1);
setjmp(x);
_setjmp(x);
sigsetjmp(y, 0);
__sigsetjmp(y, 0);
longjmp(x, 0);
_longjmp(x, 0);
siglongjmp(y, 0);
_Defer {
__builtin_setjmp(x); // expected-error {{cannot use '__builtin_setjmp' inside a defer statement}}
__builtin_longjmp(x, 1); // expected-error {{cannot use '__builtin_longjmp' inside a defer statement}}
setjmp(x); // expected-error {{cannot use 'setjmp' inside a defer statement}}
_setjmp(x); // expected-error {{cannot use '_setjmp' inside a defer statement}}
sigsetjmp(y, 0); // expected-error {{cannot use 'sigsetjmp' inside a defer statement}}
__sigsetjmp(y, 0); // expected-error {{cannot use '__sigsetjmp' inside a defer statement}}
longjmp(x, 0); // expected-error {{cannot use 'longjmp' inside a defer statement}}
_longjmp(x, 0); // expected-error {{cannot use '_longjmp' inside a defer statement}}
siglongjmp(y, 0); // expected-error {{cannot use 'siglongjmp' inside a defer statement}}
}
};
}
}