setjmp.h: Fix C++ build and avoid duplicate throw declaration
commit8166707a3350ce1fdaf669fb3836810727379342
authorMarcus Hähnel <marcus.haehnel@kernkonzept.com>
Sun, 22 Oct 2023 19:44:45 +0000 (22 21:44 +0200)
committerWaldemar Brodkorb <wbx@openadk.org>
Thu, 2 Nov 2023 08:52:24 +0000 (2 09:52 +0100)
treed368e52e7543a17dc238b733918cdade9022306f
parentbdbe7da9dbedc66a0b27432e6ae0004a17c5dd65
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.
include/setjmp.h