https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=211304
--- Comment #3 from Mark Millard <mar...@dsl-only.net> --- (In reply to Mark Millard from comment #0) The code in question for the overflow in an implicit constant conversion is for: c.err_to_clearinit = cpu_to_be32( V_FW_HELLO_CMD_MASTERDIS(master == MASTER_CANT) | V_FW_HELLO_CMD_MASTERFORCE(master == MASTER_MUST) | V_FW_HELLO_CMD_MBMASTER(master == MASTER_MUST ? mbox : M_FW_HELLO_CMD_MBMASTER) | V_FW_HELLO_CMD_MBASYNCNOT(evt_mbox) | V_FW_HELLO_CMD_STAGE(FW_HELLO_CMD_STAGE_OS) | F_FW_HELLO_CMD_CLEARINIT); V_FW_HELLO_CMD_MASTERDIS uses S_FW_HELLO_CMD_MASTERDIS: # grep V_FW_HELLO_CMD_MASTERDIS /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/*/* /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/common/t4_hw.c: V_FW_HELLO_CMD_MASTERDIS(master == MASTER_CANT) | /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/firmware/t4fw_interface.h:#define V_FW_HELLO_CMD_MASTERDIS(x) ((x) << S_FW_HELLO_CMD_MASTERDIS) /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/firmware/t4fw_interface.h:#define F_FW_HELLO_CMD_MASTERDIS V_FW_HELLO_CMD_MASTERDIS(1U) S_FW_HELLO_CMD_MASTERDIS is 29: # grep S_FW_HELLO_CMD_MASTERDIS /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/*/* /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/firmware/t4fw_interface.h:#define S_FW_HELLO_CMD_MASTERDIS 29 /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/firmware/t4fw_interface.h:#define V_FW_HELLO_CMD_MASTERDIS(x) ((x) << S_FW_HELLO_CMD_MASTERDIS) /usr/src/sys/modules/cxgbe/if_cxgbe/../../../dev/cxgbe/firmware/t4fw_interface.h: (((x) >> S_FW_HELLO_CMD_MASTERDIS) & M_FW_HELLO_CMD_MASTERDIS) S_FW_HELLO_CMD_MASTERDIS being 29 means that V_FW_HELLO_CMD_MASTERDIS(x)'s ((x) << S_FW_HELLO_CMD_MASTERDIS) is far more than 16 bits wide. (I'll not list the other example bits.) For: ./x86/endian.h:75:53: note: in definition of macro '__bswap16' __bswap16_gen((__uint16_t)(x)) : __bswap16_var(x))) ^ the __bswap16_var is (from x86/endian.h ): static __inline __uint16_t __bswap16_var(__uint16_t _x) { return (__bswap16_gen(_x)); } and so there is an implicit truncation to 16 bits before __bswap16_gen(_x) and its & 0xffff masking is involved. And that is what the compiler is complaining about: the implicit status of the truncation. The truncated value appears to be fine for the code's purpose. -- You are receiving this mail because: You are the assignee for the bug. _______________________________________________ freebsd-bugs@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"