GNU bug report logs -
#60971
build failure of v3.0.9rc1 on mac os 12.6
Previous Next
Reported by: lloda <lloda <at> sarc.name>
Date: Fri, 20 Jan 2023 19:17:01 UTC
Severity: normal
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#60971: build failure of v3.0.9rc1 on mac os 12.6
which was filed against the guile package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 60971 <at> debbugs.gnu.org.
--
60971: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=60971
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
lloda <lloda <at> sarc.name> skribis:
> lgtm, no other issues on mac os.
Awesome, pushed as 9b20ca275dba758a194073936cde7c95311bd51e.
Ludo’.
[Message part 3 (message/rfc822, inline)]
Hello,
v3.0.9rc1 fails on mac os 12.6.2 & gcc 12.2 or clang 14, same error in either case. gcc's error is:
------------------------------------
CC libguile_3.0_la-posix.lo
In file included from ../../../src/guile4/libguile/posix.c:82:
../../../src/guile4/libguile/posix.c:109:9: error: lvalue required as unary '&' operand
109 | verify (WEXITSTATUS (W_EXITCODE (127, 0)) == 127);
| ^~~~~~~~~~~
../../../src/guile4/lib/verify.h:213:57: note: in definition of macro '_GL_VERIFY'
213 | # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)
| ^
../../../src/guile4/libguile/posix.c:109:1: note: in expansion of macro 'verify'
109 | verify (WEXITSTATUS (W_EXITCODE (127, 0)) == 127);
| ^~~~~~
../../../src/guile4/libguile/posix.c:109:9: error: expression in static assertion is not an integer
109 | verify (WEXITSTATUS (W_EXITCODE (127, 0)) == 127);
| ^~~~~~~~~~~
../../../src/guile4/lib/verify.h:213:57: note: in definition of macro '_GL_VERIFY'
213 | # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)
| ^
../../../src/guile4/libguile/posix.c:109:1: note: in expansion of macro 'verify'
109 | verify (WEXITSTATUS (W_EXITCODE (127, 0)) == 127);
| ^~~~~~
------------------------------------
The problematic section in libguile/posix.c
...
#if HAVE_SYS_WAIT_H
# include <sys/wait.h>
#endif
#ifndef WEXITSTATUS
# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
#endif
#ifndef WIFEXITED
# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
#endif
#ifndef W_EXITCODE
/* Macro for constructing a status value. Found in glibc. */
# ifdef _WIN32 /* see Gnulib's posix-w32.h */
# define W_EXITCODE(ret, sig) (ret)
# else
# define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
# endif
#endif
verify (WEXITSTATUS (W_EXITCODE (127, 0)) == 127);
...
adding -o .libs/libguile_3.0_la-posix.i -E to the build line shows line 109 as
_Static_assert ( (((*(int *)&((( 127 ) << 8 | ( 0 )))) >> 8) & 0x000000ff) == 127, "verify (" "WEXITSTATUS (W_EXITCODE (127, 0)) == 127" ")");
^
forcing redefinition of WEXITSTATUS shows the previous definition at /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/wait.h
...
#if defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE)
#define _W_INT(i) (i)
#else
#define _W_INT(w) (*(int *)&(w)) /* convert union wait to int */ <------------- problem
#define WCOREFLAG 0200
#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
/* These macros are permited, as they are in the implementation namespace */
#define _WSTATUS(x) (_W_INT(x) & 0177)
#define _WSTOPPED 0177 /* _WSTATUS if process is stopped */
/*
* [XSI] The <sys/wait.h> header shall define the following macros for
* analysis of process status values
*/
#if __DARWIN_UNIX03
#define WEXITSTATUS(x) ((_W_INT(x) >> 8) & 0x000000ff)
#else /* !__DARWIN_UNIX03 */
#define WEXITSTATUS(x) (_W_INT(x) >> 8)
#endif /* !__DARWIN_UNIX03 */
/* 0x13 == SIGCONT */
#define WSTOPSIG(x) (_W_INT(x) >> 8)
#define WIFCONTINUED(x) (_WSTATUS(x) == _WSTOPPED && WSTOPSIG(x) == 0x13)
#define WIFSTOPPED(x) (_WSTATUS(x) == _WSTOPPED && WSTOPSIG(x) != 0x13)
#define WIFEXITED(x) (_WSTATUS(x) == 0)
#define WIFSIGNALED(x) (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
#define WTERMSIG(x) (_WSTATUS(x))
#if (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE))
#define WCOREDUMP(x) (_W_INT(x) & WCOREFLAG)
#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
#define W_STOPCODE(sig) ((sig) << 8 | _WSTOPPED)
#endif /* (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) */
...
so that's the problem, but I'm not sure what the solution is. The way it's
written, W_EXITCODE() is always going to give up a number...
Thanks
Daniel
This bug report was last modified 2 years and 174 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.