[PATCH] Fix newlib/testsuite/newlib.search/hsearchtest.c compilation for 16-bit targets.
Jeff Johnston
jjohnstn@redhat.com
Wed Jul 15 00:08:46 GMT 2026
Patch merged.
-- Jeff J.
On Sun, Jul 12, 2026 at 9:11 PM Jan Dubiec <jdx@o2.pl> wrote:
> When the test case is compiled for a 16-bit target, the compiler emits
> the two warnings shown below, causing the test to fail. The code assumes
> that pointers are 32 bits wide, which obviously is not true. This patch
> fixes the issue.
>
> h8300-elf-gcc
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c -mn
> -I/mnt/Works/newlib/newlib/testsuite/include -lm -o
> /mnt/Works/xcomp/build-newlib-h8300-linux/h8300-elf/newlib/testsuite/hsearchtest.x
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c: In
> function 'main':
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:80:26:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> 80 | e.data = (void *)(long)i;
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:84:22:
> warning: cast from pointer to integer of different size
> [-Wpointer-to-int-cast]
> 84 | TEST((long)ep->data == i);
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:50:19:
> note: in definition of macro 'TEST'
> 50 | #define TEST(e) ((e) ? (void)0 : testfail(__FILE__, __LINE__, #e))
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:96:22:
> warning: cast from pointer to integer of different size
> [-Wpointer-to-int-cast]
> 96 | TEST((long)ep->data == i);
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:50:19:
> note: in definition of macro 'TEST'
> 50 | #define TEST(e) ((e) ? (void)0 : testfail(__FILE__, __LINE__, #e))
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:105:14:
> warning: cast from pointer to integer of different size
> [-Wpointer-to-int-cast]
> 105 | TEST((long)ep->data == 0);
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:50:19:
> note: in definition of macro 'TEST'
> 50 | #define TEST(e) ((e) ? (void)0 : testfail(__FILE__, __LINE__, #e))
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:118:43:
> warning: cast from pointer to integer of different size
> [-Wpointer-to-int-cast]
> 118 | TEST(strcmp(ep->key, "a") == 0 && (long)ep->data == 0);
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:50:19:
> note: in definition of macro 'TEST'
> 50 | #define TEST(e) ((e) ? (void)0 : testfail(__FILE__, __LINE__, #e))
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:120:44:
> warning: cast from pointer to integer of different size
> [-Wpointer-to-int-cast]
> 120 | TEST(strcmp(ep2->key, "b") == 0 && (long)ep2->data == 1);
> | ^
> /mnt/Works/newlib/newlib/testsuite/newlib.search/hsearchtest.c:50:19:
> note: in definition of macro 'TEST'
> 50 | #define TEST(e) ((e) ? (void)0 : testfail(__FILE__, __LINE__, #e))
> | ^
>
> Signed-off-by: Jan Dubiec <jdx@o2.pl>
> ---
> newlib/testsuite/newlib.search/hsearchtest.c | 22 +++++++++++++++-------
> 1 file changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/newlib/testsuite/newlib.search/hsearchtest.c
> b/newlib/testsuite/newlib.search/hsearchtest.c
> index 515440382..418b0c5d6 100644
> --- a/newlib/testsuite/newlib.search/hsearchtest.c
> +++ b/newlib/testsuite/newlib.search/hsearchtest.c
> @@ -46,6 +46,14 @@ __COPYRIGHT(
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> +#include <stdint.h>
> +
> +#ifdef __INTPTR_TYPE__
> + #define INTPTRTYPE intptr_t
> +#else
> + /* Just in case there is no intptr_t on a target... */
> + #define INTPTRTYPE long
> +#endif
>
> #define TEST(e) ((e) ? (void)0 : testfail(__FILE__, __LINE__, #e))
>
> @@ -77,11 +85,11 @@ main(int argc, char *argv[])
> ch[0] = 'a' + i;
> e.key = strdup(ch); /* ptr to provided key is kept! */
> TEST(e.key != NULL);
> - e.data = (void *)(long)i;
> + e.data = (void *)(INTPTRTYPE)i;
> ep = hsearch(e, ENTER);
> TEST(ep != NULL);
> TEST(strcmp(ep->key, ch) == 0);
> - TEST((long)ep->data == i);
> + TEST((INTPTRTYPE)ep->data == i);
> }
>
> /* e.key should be constant from here on down. */
> @@ -93,16 +101,16 @@ main(int argc, char *argv[])
> ep = hsearch(e, FIND);
> TEST(ep != NULL);
> TEST(strcmp(ep->key, ch) == 0);
> - TEST((long)ep->data == i);
> + TEST((INTPTRTYPE)ep->data == i);
> }
>
> /* Check duplicate entry. Should _not_ overwrite existing data.
> */
> ch[0] = 'a';
> - e.data = (void *)(long)12345;
> + e.data = (void *)(INTPTRTYPE)12345;
> ep = hsearch(e, FIND);
> TEST(ep != NULL);
> TEST(strcmp(ep->key, ch) == 0);
> - TEST((long)ep->data == 0);
> + TEST((INTPTRTYPE)ep->data == 0);
>
> /* Check for something that's not there. */
> ch[0] = 'A';
> @@ -115,9 +123,9 @@ main(int argc, char *argv[])
> ch[0] = 'b';
> ep2 = hsearch(e, FIND);
> TEST(ep != NULL);
> - TEST(strcmp(ep->key, "a") == 0 && (long)ep->data == 0);
> + TEST(strcmp(ep->key, "a") == 0 && (INTPTRTYPE)ep->data == 0);
> TEST(ep2 != NULL);
> - TEST(strcmp(ep2->key, "b") == 0 && (long)ep2->data == 1);
> + TEST(strcmp(ep2->key, "b") == 0 && (INTPTRTYPE)ep2->data == 1);
>
> hdestroy();
>
> --
> 2.54.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/newlib/attachments/20260714/94fab98a/attachment.htm>
More information about the Newlib
mailing list