diff mbox series

libgm2: Fix libm2iso/wraptime.cc compilation on Solaris

Message ID yddle7oy7ic.fsf@CeBiTec.Uni-Bielefeld.DE
State New
Headers show
Series libgm2: Fix libm2iso/wraptime.cc compilation on Solaris | expand

Commit Message

Rainer Orth Feb. 13, 2024, 10:37 a.m. UTC
As it turned out, my patch to complete the libgm2 autoconf macros works
on both Linux/sparc64 and Linux/x86_64, but breaks Solaris bootstrap:

/vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc: In function 'int m2iso_wraptime_gettimeofday(void*, timezone*)':
/vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc:148:24: error: invalid conversion from 'void*' to 'timeval*' [-fpermissive]
  148 |   return gettimeofday (tv, tz);
      |                        ^~
      |                        |
      |                        void*
In file included from /usr/include/sys/select.h:27,
                 from /usr/include/sys/types.h:665,
                 from /vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc:35:
/usr/include/sys/time.h:444:18: note:   initializing argument 1 of 'int gettimeofday(timeval*, void*)'
  444 | int gettimeofday(struct timeval *_RESTRICT_KYWD, void *_RESTRICT_KYWD);
      |                  ^
/vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc: In function 'int m2iso_wraptime_settimeofday(void*, timezone*)':
/vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc:165:24: error: invalid conversion from 'void*' to 'timeval*' [-fpermissive]
  165 |   return settimeofday (tv, tz);
      |                        ^~
      |                        |
      |                        void*
/usr/include/sys/time.h:431:18: note:   initializing argument 1 of 'int settimeofday(timeval*, void*)'
  431 | int settimeofday(struct timeval *, void *);
      |                  ^~~~~~~~~~~~~~~~

This happens because on Linux only HAVE_[GS]ETTIMEOFDAY is defined,
while Solaris has both that and HAVE_STRUCT_TIMEZONE, selecting
different implementations.

Fixed by casting tv to struct timeval *.

I thought about changing the signatures instead to take a struct timeval
* instead, but that seemed risky given that there's a
HAVE_STRUCT_TIMEVAL, so would probably break other targets.

Bootstrapped without regressions on i386-pc-solaris2.11,
sparc-sun-solaris2.11, and x86_64-pc-linux-gnu.

Ok for trunk?

	Rainer

Comments

Gaius Mulley Feb. 13, 2024, 12:21 p.m. UTC | #1
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

> As it turned out, my patch to complete the libgm2 autoconf macros works
> on both Linux/sparc64 and Linux/x86_64, but breaks Solaris bootstrap:
>
> /vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc: In function 'int m2iso_wraptime_gettimeofday(void*, timezone*)':
> /vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc:148:24: error: invalid conversion from 'void*' to 'timeval*' [-fpermissive]
>   148 |   return gettimeofday (tv, tz);
>       |                        ^~
>       |                        |
>       |                        void*
> In file included from /usr/include/sys/select.h:27,
>                  from /usr/include/sys/types.h:665,
>                  from /vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc:35:
> /usr/include/sys/time.h:444:18: note:   initializing argument 1 of 'int gettimeofday(timeval*, void*)'
>   444 | int gettimeofday(struct timeval *_RESTRICT_KYWD, void *_RESTRICT_KYWD);
>       |                  ^
> /vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc: In function 'int m2iso_wraptime_settimeofday(void*, timezone*)':
> /vol/gcc/src/hg/master/local/libgm2/libm2iso/wraptime.cc:165:24: error: invalid conversion from 'void*' to 'timeval*' [-fpermissive]
>   165 |   return settimeofday (tv, tz);
>       |                        ^~
>       |                        |
>       |                        void*
> /usr/include/sys/time.h:431:18: note:   initializing argument 1 of 'int settimeofday(timeval*, void*)'
>   431 | int settimeofday(struct timeval *, void *);
>       |                  ^~~~~~~~~~~~~~~~
>
> This happens because on Linux only HAVE_[GS]ETTIMEOFDAY is defined,
> while Solaris has both that and HAVE_STRUCT_TIMEZONE, selecting
> different implementations.
>
> Fixed by casting tv to struct timeval *.
>
> I thought about changing the signatures instead to take a struct timeval
> * instead, but that seemed risky given that there's a
> HAVE_STRUCT_TIMEVAL, so would probably break other targets.
>
> Bootstrapped without regressions on i386-pc-solaris2.11,
> sparc-sun-solaris2.11, and x86_64-pc-linux-gnu.
>
> Ok for trunk?

yes sure, lgtm - many thanks,

regards,
Gaius
diff mbox series

Patch

# HG changeset patch
# Parent  54196105ece9b22dbacfebb0bebd5c857cd5c19a
libgm2: Fix libm2iso/wraptime.cc compilation on Solaris

diff --git a/libgm2/libm2iso/wraptime.cc b/libgm2/libm2iso/wraptime.cc
--- a/libgm2/libm2iso/wraptime.cc
+++ b/libgm2/libm2iso/wraptime.cc
@@ -145,7 +145,7 @@  EXPORT(KillTM) (struct tm *tv)
 extern "C" int
 EXPORT(gettimeofday) (void *tv, struct timezone *tz)
 {
-  return gettimeofday (tv, tz);
+  return gettimeofday ((struct timeval *) tv, tz);
 }
 #else
 extern "C" int
@@ -162,7 +162,7 @@  EXPORT(gettimeofday) (void *tv, void *tz
 extern "C" int
 EXPORT(settimeofday) (void *tv, struct timezone *tz)
 {
-  return settimeofday (tv, tz);
+  return settimeofday ((struct timeval *) tv, tz);
 }
 #else
 extern "C" int