diff options
author | Marcus Hähnel <marcus.haehnel@kernkonzept.com> | 2023-10-22 21:44:45 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2023-11-02 09:52:24 +0100 |
commit | 8166707a3350ce1fdaf669fb3836810727379342 (patch) | |
tree | d368e52e7543a17dc238b733918cdade9022306f /include | |
parent | bdbe7da9dbedc66a0b27432e6ae0004a17c5dd65 (diff) |
setjmp.h: Fix C++ build and avoid duplicate throw declaration
Commit 21cbb6fe ("unistd.h: put getppid under XOPEN2K8") introduced a
new __THROWNL specification for non-leaf throws. It also made use of
these in the setjmp.h header. The functions that use this specification
(longjmp and siglongjmp) have their extern __libc__* equivalent
definition prototype specified using __typeof__ for the internal
function signatures. For C++ this copies the throw() specifier, since
this is part of the type for C++. The attribute in C is not.
This commit explicitly types out the signature for the two functions to
be compatible between the C++ and C worlds.
An alternative would be to keep the __typeof__ declaration and use
the copy attribute. Then the __THROWNL part could be thrown out since
the C attribute would be copied and the C++ exception specifier would
be part of the signature from __type__. However, since the copy
attribute is not supported for all compilers supported by uclibc-ng
this is not viable at this time.
Diffstat (limited to 'include')
-rw-r--r-- | include/setjmp.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/include/setjmp.h b/include/setjmp.h index e6f437b93..5d7df3667 100644 --- a/include/setjmp.h +++ b/include/setjmp.h @@ -94,8 +94,10 @@ __END_DECLS #ifdef _LIBC extern void __longjmp(__jmp_buf __env, int __val) __THROWNL attribute_noreturn; libc_hidden_proto(__longjmp) -extern __typeof(longjmp) __libc_longjmp __THROWNL attribute_noreturn; -extern __typeof(siglongjmp) __libc_siglongjmp __THROWNL attribute_noreturn; +extern void __libc_longjmp(struct __jmp_buf_tag __env[1], int __val) + __THROWNL attribute_noreturn; +extern void __libc_siglongjmp(sigjmp_buf __env, int __val) + __THROWNL attribute_noreturn; extern void _longjmp_unwind(jmp_buf __env, int __val); libc_hidden_proto(_longjmp_unwind) extern int __sigjmp_save(sigjmp_buf __env, int __savemask) attribute_hidden; |