https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116885
--- Comment #7 from Jaroslav Fojtík <JaFojtik at seznam dot cz> ---
Just for clarification.
This worked till GCC-14 - The code has been verified and proven functionable
many times:
case 'e':{const uint64_t e = va_arg(ap,uint64_t);
writed+=WrQWORD_LoEnd(e,F);}
break;
case 'E':{const uint64_t e = va_arg(ap,uint64_t);
writed+=WrQWORD_HiEnd(e,F);}
break;
This is just correct (of course for architectures, where double has 8 bytes):
case 'e':{const double e = va_arg(ap,double);
writed+=WrQWORD_LoEnd(*(uint64_t*)&e,F);}
break;
case 'E':{const double e = va_arg(ap,double);
writed+=WrQWORD_HiEnd(*(uint64_t*)&e,F);}
break;