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"

Reply via email to