Björn Ketelaars:

> Diff below unbreaks building mail/hypermail with llvm22. While here
> change HOMEPAGE to https.

> +-  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
> ++  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, (va_list 
> *)args, NULL);

That can't be right.  You are losing a level of indirection here.
When it still was a warning, the compiler effectively performed
(va_list *)&args.

You may notice that the other functions that allocate a variable
va_list args and take its address compile just fine.  Apparently a
va_list parameter isn't exactly the same thing as a va_list variable,
but it must be possible to va_copy() a parameter to a variable, so
I propose the diff below.

(After I came up with that, I also found this
https://codeberg.org/OpenBSD/ports/commit/8ebf96e567248e85e4fe9eaba91ccc6f55809396
)

--- mail/hypermail/Makefile
+++ mail/hypermail/Makefile
@@ -3,8 +3,9 @@ COMMENT=                generate a cross-referenced HTML mail 
archiv
 VERSION=               2.3.0
 DISTNAME=              hypermail-${VERSION}
 CATEGORIES=            mail www
+REVISION=              0
 
-HOMEPAGE=              http://www.hypermail-project.org/
+HOMEPAGE=              https://www.hypermail-project.org/
 
 SITES=                 ${HOMEPAGE}
 WRKDIST=               ${WRKDIR}/hypermail
commit - 6b40a864ff5cd7eb048177f2aa76c5686415ede4
blob - /dev/null
file + mail/hypermail/patches/patch-src_trio_c (mode 644)
--- /dev/null
+++ mail/hypermail/patches/patch-src_trio_c
@@ -0,0 +1,253 @@
+Index: src/trio.c
+--- src/trio.c.orig
++++ src/trio.c
+@@ -3571,10 +3571,13 @@ TRIO_PUBLIC int
+ trio_vprintf
+ TRIO_ARGS2((format, args),
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
++  va_list args;
++
+   assert(VALID(format));
+ 
++  va_copy(args, arglist);
+   return TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
+ }
+ 
+@@ -3640,11 +3643,14 @@ trio_vfprintf
+ TRIO_ARGS3((file, format, args),
+          FILE *file,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
++  va_list args;
++
+   assert(VALID(file));
+   assert(VALID(format));
+   
++  va_copy(args, arglist);  
+   return TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL);
+ }
+ 
+@@ -3712,10 +3718,13 @@ trio_vdprintf
+ TRIO_ARGS3((fd, format, args),
+          int fd,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
++  va_list args;
++
+   assert(VALID(format));
+   
++  va_copy(args, arglist);  
+   return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL);
+ }
+ 
+@@ -3771,15 +3780,17 @@ TRIO_ARGS4((stream, closure, format, args),
+          trio_outstream_t stream,
+          trio_pointer_t closure,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
+   trio_custom_t data;
++  va_list args;
+ 
+   assert(VALID(stream));
+   assert(VALID(format));
+ 
+   data.stream.out = stream;
+   data.closure = closure;
++  va_copy(args, arglist);
+   return TrioFormat(&data, 0, TrioOutStreamCustom, format, &args, NULL);
+ }
+ 
+@@ -3846,13 +3857,15 @@ trio_vsprintf
+ TRIO_ARGS3((buffer, format, args),
+          char *buffer,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
+   int status;
++  va_list args;
+ 
+   assert(VALID(buffer));
+   assert(VALID(format));
+ 
++  va_copy(args, arglist);
+   status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL);
+   *buffer = NIL;
+   return status;
+@@ -3934,13 +3947,15 @@ TRIO_ARGS4((buffer, max, format, args),
+          char *buffer,
+          size_t max,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
+   int status;
++  va_list args;
+ 
+   assert(VALID(buffer));
+   assert(VALID(format));
+ 
++  va_copy(args, arglist);
+   status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
+                     TrioOutStreamStringMax, format, &args, NULL);
+   if (max > 0)
+@@ -4015,16 +4030,18 @@ TRIO_ARGS4((buffer, max, format, args),
+          char *buffer,
+          size_t max,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
+   int status;
+   size_t buf_len;
++  va_list args;
+   
+   assert(VALID(buffer));
+   assert(VALID(format));
+ 
+   buf_len = trio_length(buffer);
+   buffer = &buffer[buf_len];
++  va_copy(args, arglist);
+   status = TrioFormat(&buffer, max - 1 - buf_len,
+                     TrioOutStreamStringMax, format, &args, NULL);
+   *buffer = NIL;
+@@ -4068,13 +4085,15 @@ TRIO_PUBLIC char *
+ trio_vaprintf
+ TRIO_ARGS2((format, args),
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
+   trio_string_t *info;
+   char *result = NULL;
++  va_list args;
+   
+   assert(VALID(format));
+   
++  va_copy(args, arglist); 
+   info = trio_xstring_duplicate("");
+   if (info)
+     {
+@@ -4128,7 +4147,7 @@ trio_vasprintf
+ TRIO_ARGS3((result, format, args),
+          char **result,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
+   int status;
+   trio_string_t *info;
+@@ -4144,6 +4163,9 @@ TRIO_ARGS3((result, format, args),
+     }
+   else
+     {
++      va_list args;
++
++      va_copy(args, arglist);
+       status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
+                         format, &args, NULL);
+       if (status >= 0)
+@@ -4832,9 +4854,12 @@ TRIO_ARGS3((ref, format, arglist),
+          TRIO_CONST char *format,
+          va_list arglist)
+ {
++  va_list args;
++
+   assert(VALID(format));
+   
+-  return TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL);
++  va_copy(args, arglist);  
++  return TrioFormatRef((trio_reference_t *)ref, format, &args, NULL);
+ }
+ 
+ /*************************************************************************
+@@ -6483,10 +6508,13 @@ TRIO_PUBLIC int
+ trio_vscanf
+ TRIO_ARGS2((format, args),
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
++  va_list args;
++
+   assert(VALID(format));
+   
++  va_copy(args, arglist);
+   return TrioScan((trio_pointer_t)stdin, 0,
+                 TrioInStreamFile,
+                 format, &args, NULL);
+@@ -6534,11 +6562,14 @@ trio_vfscanf
+ TRIO_ARGS3((file, format, args),
+          FILE *file,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
++  va_list args;
++
+   assert(VALID(file));
+   assert(VALID(format));
+   
++  va_copy(args, arglist);  
+   return TrioScan((trio_pointer_t)file, 0,
+                 TrioInStreamFile,
+                 format, &args, NULL);
+@@ -6587,10 +6618,13 @@ trio_vdscanf
+ TRIO_ARGS3((fd, format, args),
+          int fd,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
++  va_list args;
++
+   assert(VALID(format));
+   
++  va_copy(args, arglist);
+   return TrioScan((trio_pointer_t)&fd, 0,
+                 TrioInStreamFileDescriptor,
+                 format, &args, NULL);
+@@ -6642,15 +6676,17 @@ TRIO_ARGS4((stream, closure, format, args),
+          trio_instream_t stream,
+          trio_pointer_t closure,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
+   trio_custom_t data;
++  va_list args;
+   
+   assert(VALID(stream));
+   assert(VALID(format));
+ 
+   data.stream.in = stream;
+   data.closure = closure;
++  va_copy(args, arglist);
+   return TrioScan(&data, 0, TrioInStreamCustom, format, &args, NULL);
+ }
+ 
+@@ -6701,11 +6737,14 @@ trio_vsscanf
+ TRIO_ARGS3((buffer, format, args),
+          TRIO_CONST char *buffer,
+          TRIO_CONST char *format,
+-         va_list args)
++         va_list arglist)
+ {
++  va_list args;
++
+   assert(VALID(buffer));
+   assert(VALID(format));
+   
++  va_copy(args, arglist);
+   return TrioScan((trio_pointer_t)&buffer, 0,
+                 TrioInStreamString,
+                 format, &args, NULL);

-- 
Christian "naddy" Weisgerber                          [email protected]

Reply via email to