[dpdk-dev] [PATCH v6 3/8] rte_ip.h: cast type decided by sizeof to uint32

Bruce Richardson bruce.richardson at intel.com
Mon May 21 14:13:17 CEST 2018


On Mon, May 21, 2018 at 10:01:08AM +0800, Andy Green wrote:
> /projects/lagopus/src/dpdk/build/include/rte_ip.h:
> In function 'rte_ipv4_udptcp_cksum':
> /projects/lagopus/src/dpdk/build/include/rte_byteorder.h:
> 51:24: warning: conversion from 'long unsigned int' to
> 'uint32_t' {aka 'unsigned int'} may change value
> [-Wconversion]
>  #define rte_bswap16(x) ((uint16_t)
> (__builtin_constant_p(x) ?  \
>                         ^
> /projects/lagopus/src/dpdk/build/include/rte_byteorder.h:
> 85:29: note: in expansion of macro 'rte_bswap16'
>  #define rte_be_to_cpu_16(x) rte_bswap16(x)
>                              ^~~~~~~~~~~
> /projects/lagopus/src/dpdk/build/include/rte_ip.h:321:11:
> note: in expansion of macro 'rte_be_to_cpu_16'
>   l4_len = rte_be_to_cpu_16(ipv4_hdr->total_length) -
>            ^~~~~~~~~~~~~~~~
> 
> Also with this one, it is a cast that always occurred
> and is just being done explicitly, with no changes to
> the generated code.
> 
> The warning stack is misleading, it points to the last
> element in the macro that produced the lhs of the subtraction
> above.  But the only "unsigned long int" in the expression is
> the result of the sizeof() on the rhs, it promotes the
> subtraction result to unsigned long.  So the error actually
> relates to the result of the outer subtraction.
> 
> The actual error is "you are trying to put an unsigned long
> into a uint32_t".  We always did so, the fix is just to inform
> the compiler it is intentional with an explicit cast.
> 
> Fixes: 6006818cfb ("net: new checksum functions")
> Signed-off-by: Andy Green <andy at warmcat.com>
> ---
>  lib/librte_net/rte_ip.h |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
Acked-by: Bruce Richardson <bruce.richardson at intel.com>



More information about the dev mailing list