bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

aligned_alloc: Fix test failure on OpenBSD 6.8


From: Bruno Haible
Subject: aligned_alloc: Fix test failure on OpenBSD 6.8
Date: Fri, 01 Jan 2021 22:59:08 +0100
User-agent: KMail/5.1.3 (Linux/4.4.0-197-generic; KDE/5.18.0; x86_64; ; )

On OpenBSD 6.8, there are two compilers available: cc (= clang) and
gcc. With gcc, the test 'test-aligned_alloc' crashes. This is due to
a missing function declaration, which produces warnings:

../../gltests/test-aligned_alloc.c: In function 'main':
../../gltests/test-aligned_alloc.c:51: warning: implicit declaration of 
function 'aligned_alloc'
../../gltests/test-aligned_alloc.c:51: warning: assignment makes pointer from 
integer without a cast
../../gltests/test-aligned_alloc.c:56: warning: assignment makes pointer from 
integer without a cast
../../gltests/test-aligned_alloc.c:61: warning: assignment makes pointer from 
integer without a cast
../../gltests/test-aligned_alloc.c:66: warning: assignment makes pointer from 
integer without a cast
../../gltests/test-aligned_alloc.c:71: warning: assignment makes pointer from 
integer without a cast
../../gltests/test-aligned_alloc.c:76: warning: assignment makes pointer from 
integer without a cast

This function declaration exists in <stdlib.h>, but only when
standards macros ensure that it is visible. The macro to enable this
(and other) declarations is _ISOC11_SOURCE. While this macro (or
an equivalent) is probably automatically enabled with 'gcc -std=gnu11' [1],
the particular GCC version (4.2.1) does not support -std=gnu11, only
-std=gnu99.

[1] https://man7.org/linux/man-pages/man7/feature_test_macros.7.html

This could go into Autoconf's AC_USE_SYSTEM_EXTENSIONS at some point.
But probably not now; it may be too risky now.


2021-01-01  Bruno Haible  <bruno@clisp.org>

        aligned_alloc: Fix test failure on OpenBSD 6.8.
        * m4/extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): On OpenBSD, define
        _ISOC11_SOURCE.
        * m4/aligned_alloc.m4 (gl_FUNC_ALIGNED_ALLOC): Update comment.

diff --git a/m4/aligned_alloc.m4 b/m4/aligned_alloc.m4
index f16ad15..54253ed 100644
--- a/m4/aligned_alloc.m4
+++ b/m4/aligned_alloc.m4
@@ -1,4 +1,4 @@
-# aligned_alloc.m4 serial 1
+# aligned_alloc.m4 serial 2
 dnl Copyright (C) 2020-2021 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -9,7 +9,7 @@ AC_DEFUN([gl_FUNC_ALIGNED_ALLOC],
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
 
-  dnl Persuade glibc <stdlib.h> to declare aligned_alloc().
+  dnl Persuade glibc and OpenBSD <stdlib.h> to declare aligned_alloc().
   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
   AC_CHECK_FUNCS_ONCE([aligned_alloc])
diff --git a/m4/extensions.m4 b/m4/extensions.m4
index f7333ac..5792a95 100644
--- a/m4/extensions.m4
+++ b/m4/extensions.m4
@@ -1,4 +1,4 @@
-# serial 21  -*- Autoconf -*-
+# serial 22  -*- Autoconf -*-
 # Enable extensions on systems that normally disable them.
 
 # Copyright (C) 2003, 2006-2021 Free Software Foundation, Inc.
@@ -212,4 +212,16 @@ dnl it should only be defined when necessary.
 AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
 [
   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  dnl On OpenBSD 6.8 with GCC, the include files contain a couple of
+  dnl definitions that are only activated with an explicit -D_ISOC11_SOURCE.
+  dnl That's because this version of GCC (4.2.1) supports the option
+  dnl '-std=gnu99' but not the option '-std=gnu11'.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  case "$host_os" in
+    openbsd*)
+      AC_DEFINE([_ISOC11_SOURCE], [1],
+        [Define to enable the declarations of ISO C 11 types and functions.])
+      ;;
+  esac
 ])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]