[PATCH] newlib/libc/stdbit: Fix static assertions for 16-bit int
Jonathan Wakely
jwakely@redhat.com
Mon Apr 20 20:32:18 GMT 2026
On Mon, 20 Apr 2026 at 14:47 -0500, Joel Sherrill wrote:
>Is there a conditional defined when building newlib to know you are inside
>newlib? I'd like to guard changes from the original FreeBSD code if that's
>possible. We do that inside RTEMS and it makes updates easier.
You could add:
--- a/newlib/libc/stdbit/stdbit_internal.h
+++ b/newlib/libc/stdbit/stdbit_internal.h
@@ -44,4 +44,6 @@
#define ULLONG_WIDTH __LONG_LONG_WIDTH__
#endif
+#define newlib_stdbit_h 1
+
#endif
And then test for it in stdc_bit_ceil.c etc. because that macro would
not be defined by the FreeBSD version of stdbit_internal.h
Or propose the fixes upstream to FreeBSD, but they might not be
interested in supporting 16-bit targets.
>--joel
>
>On Mon, Apr 20, 2026, 2:32 PM Corinna Vinschen <corinna@vinschen.de> wrote:
>
>>
>> [CC Joel Sherrill, please review]
>>
>> On Apr 20 16:24, Jonathan Wakely wrote:
>> > All the USHRT_WIDTH < UINT_WIDTH assertions fail for 16-bit int targets,
>> > such as msp430-elf. Remove those static assertions and instead fix the
>> > stdc_xxx_us functions to work correctly when USHRT_WIDTH == UINT_WIDTH.
>> >
>> > Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
>> > ---
>> >
>> > This is untested, except to check that it now compiles on msp430-elf and
>> > still compiles on arm-eabi.
>> >
>> > newlib/libc/stdbit/stdc_bit_ceil.c | 9 +++++----
>> > newlib/libc/stdbit/stdc_leading_ones.c | 10 ++++++----
>> > newlib/libc/stdbit/stdc_leading_zeros.c | 10 ++++++----
>> > newlib/libc/stdbit/stdc_trailing_ones.c | 10 ++++++----
>> > newlib/libc/stdbit/stdc_trailing_zeros.c | 11 +++++++----
>> > 5 files changed, 30 insertions(+), 20 deletions(-)
>> > [...]
>> > unsigned int
>> > stdc_leading_ones_us(unsigned short x)
>> > {
>> > +#if USHRT_WIDTH == UINT_WIDTH
>> > + /* Avoid triggering undefined behavior if x == 0. */
>> > + if (x == ~0U)
>>
>> ~0 is not 0...
>>
>>
>> Thanks,
>> Corinna
>>
More information about the Newlib
mailing list