pacparser icon indicating copy to clipboard operation
pacparser copied to clipboard

Build failure with gcc 14

Open vvolkl opened this issue 1 year ago • 1 comments

On a x86_64 machine running Fedora 40, I see the following compilation error:

gcc -o Linux_All_DBG.OBJ/jsapi.o -c -fPIC -DHAVE_VA_COPY -DVA_COPY=__va_copy -Wall -Wno-format -g -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY=va_copy -DPIC -fPIC -DDEBUG -DDEBUG_ -DEDITLINE -ILinux_All_DBG.OBJ  jsapi.c
<command-line>: warning: "VA_COPY" redefined
<command-line>: note: this is the location of the previous definition
In file included from /usr/include/ctype.h:25,
                 from jsapi.c:45:
/usr/include/features.h:196:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
  196 | # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
      |   ^~~~~~~
jsapi.c: In function ‘JS_ConvertArgumentsVA’:
jsapi.c:273:39: error: implicit declaration of function ‘JS_ADDRESSOF_VA_LIST’ [-Wimplicit-function-declaration]
  273 |                                       JS_ADDRESSOF_VA_LIST(ap))) {
      |                                       ^~~~~~~~~~~~~~~~~~~~
jsapi.c:273:39: error: passing argument 5 of ‘TryArgumentFormatter’ makes pointer from integer without a cast [-Wint-conversion]
  273 |                                       JS_ADDRESSOF_VA_LIST(ap))) {
      |                                       ^~~~~~~~~~~~~~~~~~~~~~~~
      |                                       |
      |                                       int
jsapi.c:143:44: note: expected ‘__va_list_tag (*)[1]’ but argument is of type ‘int’
  143 |                      jsval **vpp, va_list *app)
      |                                   ~~~~~~~~~^~~
jsapi.c: In function ‘JS_PushArgumentsVA’:
jsapi.c:376:39: error: passing argument 5 of ‘TryArgumentFormatter’ makes pointer from integer without a cast [-Wint-conversion]
  376 |                                       JS_ADDRESSOF_VA_LIST(ap))) {
      |                                       ^~~~~~~~~~~~~~~~~~~~~~~~
      |                                       |
      |                                       int
jsapi.c:143:44: note: expected ‘__va_list_tag (*)[1]’ but argument is of type ‘int’
  143 |                      jsval **vpp, va_list *app)
      |                                   ~~~~~~~~~^~~
make[2]: *** [rules.mk:78: Linux_All_DBG.OBJ/jsapi.o] Error 1
make[2]: Leaving directory '/tmp/pacparser/src/spidermonkey/js/src'
make[1]: *** [Makefile:35: js-buildstamp] Error 2
make[1]: Leaving directory '/tmp/pacparser/src/spidermonkey'
make: *** [Makefile:96: jsapi_buildstamp] Error 2

Can be fixed by defining HAVE_VA_LIST_AS_ARRAY, although that shouldn't be a default, because it seems to break on some aarch64 systems.

vvolkl avatar May 15 '24 12:05 vvolkl

Following patch worked for me both in amd64 and arm64.

--- a/src/spidermonkey/js/src/jsapi.c
+++ b/src/spidermonkey/js/src/jsapi.c
@@ -93,7 +93,7 @@
 #ifdef HAVE_VA_LIST_AS_ARRAY
 #define JS_ADDRESSOF_VA_LIST(ap) ((va_list *)(ap))
 #else
-#define JS_ADDRESSOF_VA_LIST(ap) (&(ap))
+#define JS_ADDRESSOF_VA_LIST(ap) ((va_list *)(&(ap)))
 #endif
 
 #if defined(JS_PARANOID_REQUEST) && defined(JS_THREADSAFE)

NGC2023 avatar Aug 01 '24 04:08 NGC2023