[PATCH v2] Return EXIT_UNSUPPORTED if __builtin_add_overflow unavailable

Sam James sam@gentoo.org
Sat Dec 14 12:26:42 GMT 2024


"H.J. Lu" <hjl.tools@gmail.com> writes:

> Since GCC 4.9 doesn't have __builtin_add_overflow:
>
> In file included from tst-stringtable.c:180:0:
> stringtable.c: In function ‘stringtable_finalize’:
> stringtable.c:185:7: error: implicit declaration of function ‘__builtin_add_overflow’ [-Werror=implicit-function-declaration]
>        else if (__builtin_add_overflow (previous->offset,
>        ^
>
> return EXIT_UNSUPPORTED for GCC 4.9 or older.
>
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> ---
>  elf/tst-stringtable.c                    | 10 ++++++++++
>  io/tst-utimensat-skeleton.c              |  5 +++++
>  sysdeps/unix/sysv/linux/tst-getdents64.c |  7 +++++++
>  time/tst-ctime.c                         | 10 ++++++++++
>  time/tst-difftime.c                      | 10 ++++++++++
>  time/tst-mktime4.c                       | 10 ++++++++++
>  6 files changed, 52 insertions(+)
>
> diff --git a/elf/tst-stringtable.c b/elf/tst-stringtable.c
> index e18496f3f1..a0e358f02a 100644
> --- a/elf/tst-stringtable.c
> +++ b/elf/tst-stringtable.c
> @@ -17,6 +17,7 @@
>  
>  #include <array_length.h>
>  #include <stdlib.h>
> +#if __GNUC_PREREQ (5, 0)
>  #include <string.h>
>  #include <stringtable.h>
>  #include <support/check.h>
> @@ -179,3 +180,12 @@ do_test (void)
>  #define _(arg) arg
>  #include "stringtable.c"
>  #include "stringtable_free.c"
> +#else
> +#include <support/test-driver.h>
> +
> +int
> +main (void)
> +{
> +  return EXIT_UNSUPPORTED;
> +}
> +#endif
> diff --git a/io/tst-utimensat-skeleton.c b/io/tst-utimensat-skeleton.c
> index 290ed81c9b..1386fa3c8f 100644
> --- a/io/tst-utimensat-skeleton.c
> +++ b/io/tst-utimensat-skeleton.c
> @@ -20,6 +20,7 @@
>  #include <inttypes.h>
>  #include <support/support.h>
>  #include <support/temp_file.h>
> +#include <support/test-driver.h>
>  #include <stdio.h>
>  
>  static int temp_fd = -1;
> @@ -72,6 +73,7 @@ do_test (void)
>    for (int i = 0; i < array_length (tests); i++)
>      {
>        /* Check if we run on port with 32 bit time_t size.  */
> +#if __GNUC_PREREQ (5, 0)
>        time_t t;
>        if (__builtin_add_overflow (tests[i].v1, 0, &t)
>  	  || __builtin_add_overflow (tests[i].v2, 0, &t))
> @@ -80,6 +82,9 @@ do_test (void)
>  		  "time_t overflows\n", i, tests[i].v1, tests[i].v2);
>  	  continue;
>          }
> +#else
> +      return EXIT_UNSUPPORTED;
> +#endif
>  
>        if (tests[i].v1 >= 0x100000000LL && !y2106)
>  	{
> diff --git a/sysdeps/unix/sysv/linux/tst-getdents64.c b/sysdeps/unix/sysv/linux/tst-getdents64.c
> index 3dd22a4e03..ba66d49a2e 100644
> --- a/sysdeps/unix/sysv/linux/tst-getdents64.c
> +++ b/sysdeps/unix/sysv/linux/tst-getdents64.c
> @@ -30,6 +30,7 @@
>  #include <sys/mman.h>
>  #include <unistd.h>
>  
> +#if __GNUC_PREREQ (5, 0)
>  /* Called by large_buffer_checks below.  */
>  static void
>  large_buffer_check (int fd, char *large_buffer, size_t large_buffer_size)
> @@ -85,6 +86,12 @@ do_test_large_size (void)
>  
>    xclose (fd);
>  }
> +#else
> +static void
> +do_test_large_size (void)
> +{
> +}
> +#endif
>  
>  static void
>  do_test_by_size (size_t buffer_size)
> diff --git a/time/tst-ctime.c b/time/tst-ctime.c
> index 8debf15004..204225992a 100644
> --- a/time/tst-ctime.c
> +++ b/time/tst-ctime.c
> @@ -20,6 +20,7 @@
>  #include <stdlib.h>
>  #include <support/check.h>
>  
> +#if __GNUC_PREREQ (5, 0)
>  static int
>  do_test (void)
>  {
> @@ -70,3 +71,12 @@ do_test (void)
>  }
>  
>  #include <support/test-driver.c>
> +#else
> +#include <support/test-driver.h>
> +
> +int
> +main (void)
> +{
> +  return EXIT_UNSUPPORTED;
> +}
> +#endif
> diff --git a/time/tst-difftime.c b/time/tst-difftime.c
> index 5043d55087..5a9a66badb 100644
> --- a/time/tst-difftime.c
> +++ b/time/tst-difftime.c
> @@ -19,6 +19,7 @@
>  #include <time.h>
>  #include <support/check.h>
>  
> +#if __GNUC_PREREQ (5, 0)
>  static void
>  test_difftime_helper (time_t t1, time_t t0, double exp_val)
>  {
> @@ -54,3 +55,12 @@ do_test (void)
>  }
>  
>  #include <support/test-driver.c>
> +#else
> +#include <support/test-driver.h>
> +
> +int
> +main ()
> +{
> +  return EXIT_UNSUPPORTED;
> +}
> +#endif
> diff --git a/time/tst-mktime4.c b/time/tst-mktime4.c
> index 505d9fcc2e..05c833c816 100644
> --- a/time/tst-mktime4.c
> +++ b/time/tst-mktime4.c
> @@ -20,6 +20,7 @@
>  #include <stdlib.h>
>  #include <support/check.h>
>  
> +#if __GNUC_PREREQ (5, 0)
>  const struct tm tm0 =
>    {
>      .tm_year = 70,
> @@ -107,3 +108,12 @@ do_test (void)
>  }
>  
>  #include <support/test-driver.c>
> +#else
> +#include <support/test-driver.h>
> +
> +int
> +main (void)
> +{
> +  return EXIT_UNSUPPORTED;
> +}
> +#endif

Reviewed-by: Sam James <sam@gentoo.org>


More information about the Libc-alpha mailing list