https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83122
--- Comment #2 from Liu Hao <lh_mouse at 126 dot com> --- Yes it is hard to tell whether there is indeed loss of precision. At the moment, the (only?) redictable way to silence the warning is to use a bitwise and operation. That is, `ptr->b = (val >> 3) & (UINT64_MAX >> 3)`.