https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86055
Bug ID: 86055 Summary: Bitshifts temporarly change uint32_t to int32_t on x86_64 Mac OS Product: gcc Version: 8.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: guicrith at gmail dot com Target Milestone: --- Created attachment 44238 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44238&action=edit Simple test program source, no dependancys. Right-shifting a negative value is implementation-defined and not recommended by good coding practice. Wikipedia The same behavior is occuring with a uint32_t, but it should be impossible for it to be negative. Under the existing C rules uint16_t should be promoted to int64_t(the native int type for x86_64) before bitshifting. It seems to be taking the signed part of int64_t without the 64 bits part. x86_64 Mac OS 10.13.5 gcc version 8.1.0 (Homebrew GCC 8.1.0)