https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114065
--- Comment #68 from dave.anglin at bell dot net --- On 2026-09-27 5:07 a.m., ebotcazou at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114065 > > --- Comment #66 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- >> 3 passes each bit offset of the timeval and timespec C structs to the >> related Ada record representation clause. This should prevent issues like >> the one reported by John. > > I'd rather not fiddle with representation clauses in this unit. What's the > declaration of the problematic structure in C exactly? glibc defines struct __timespec64 as follows: #ifndef _STRUCT_TIMESPEC64_H #define _STRUCT_TIMESPEC64_H #if __TIMESIZE == 64 # define __timespec64 timespec #else #include <endian.h> /* The glibc Y2038-proof struct __timespec64 structure for a time value. To keep things Posix-ish, we keep the nanoseconds field a 32-bit signed long, but since the Linux field is a 64-bit signed int, we pad our tv_nsec with a 32-bit unnamed bit-field padding. As a general rule the Linux kernel is ignoring upper 32 bits of tv_nsec field. */ struct __timespec64 { __time64_t tv_sec; /* Seconds */ # if BYTE_ORDER == BIG_ENDIAN __int32_t :32; /* Padding */ __int32_t tv_nsec; /* Nanoseconds */ # else __int32_t tv_nsec; /* Nanoseconds */ __int32_t :32; /* Padding */ # endif }; #endif #endif /* _STRUCT_TIMESPEC64_H */ See: glibc/include/struct___timespec64.h
