[PATCH 1/1] newlib/libc/include/setjmp.h: Add returns_twice attribute to setjmp()
Brian Inglis
Brian.Inglis@SystematicSW.ab.ca
Thu Oct 2 17:21:20 GMT 2025
On 2025-10-02 07:57, Joel Sherrill wrote:
>
>
> On Wed, Oct 1, 2025 at 4:03 AM Brian Inglis <Brian.Inglis@systematicsw.ab.ca
> <mailto:Brian.Inglis@systematicsw.ab.ca>> wrote:
>
> On 2025-10-01 01:22, Torbjorn SVENSSON wrote:
> > On 2025-09-30 16:49, Joel Sherrill wrote:
> >> The setjmp() function needs this attribute to help GCC avoid false
> >> positives for the -Wclobbered warning. The -Wclobbered warning is
> >> part of -Wextra.
> >> ---
> >> newlib/libc/include/setjmp.h | 7 ++++++-
> >> 1 file changed, 6 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/newlib/libc/include/setjmp.h b/newlib/libc/include/setjmp.h
> >> index a2830b275..5c16321a4 100644
> >> --- a/newlib/libc/include/setjmp.h
> >> +++ b/newlib/libc/include/setjmp.h
> >> @@ -17,7 +17,12 @@ void longjmp (jmp_buf __jmpb, int __retval)
> >> #else
> >> void longjmp (jmp_buf __jmpb, int __retval);
> >> #endif
> >> -int setjmp (jmp_buf __jmpb);
> >> +
> >> +#ifdef __GNUC__
> >> +int setjmp (jmp_buf __jmpb)
> >> + __attribute__ ((returns_twice));;
> > I suppose you only want a single semi-colon here.
> >> +#else
> > I think you should also drop the empty "#else" block.
> >> +#endif
> >> _END_STD_C
>
> Shouldn't the conditional be around the attribute only?
>
>
> That's not the way setjmp() was. It has this (tabs lost with copy and paste):
>
> #ifdef __GNUC__
> void longjmp (jmp_buf __jmpb, int __retval)
> __attribute__ ((__noreturn__));
> #else
> void longjmp (jmp_buf __jmpb, int __retval);
> #endif
>
> I just copied the style of what was there.
>
>
> -int setjmp (jmp_buf __jmpb);
> +int setjmp (jmp_buf __jmpb)
> +#ifdef __GNUC__
> + __attribute__ ((returns_twice))
> +#endif
> + ;
>
>
> Do you want longjmp() changed to match this also?
Your choice - it's just a matter of style: Cygwin tweaks do this a lot, leaving
as much of the existing code alone as possible, avoiding duplication and having
to check for changes in two lines if something changes, especially if derived
from an upstream original.
--
Take care. Thanks, Brian Inglis Calgary, Alberta, Canada
La perfection est atteinte Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter not when there is no more to add
mais lorsqu'il n'y a plus rien à retrancher but when there is no more to cut
-- Antoine de Saint-Exupéry
More information about the Newlib
mailing list