https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116885
Vincent Lefèvre <vincent-gcc at vinc17 dot net> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |vincent-gcc at vinc17 dot net --- Comment #8 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- (In reply to Jaroslav Fojtík from comment #7) > 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; No, this is incorrect (see ISO C17 6.5p7), unless the compiler ignores aliasing rules (e.g. -fno-strict-aliasing with GCC).