* [dpdk-dev] error: value computed is not used @ 2014-12-08 9:05 Qiu, Michael 2014-12-08 11:00 ` Wodkowski, PawelX ` (2 more replies) 0 siblings, 3 replies; 18+ messages in thread From: Qiu, Michael @ 2014-12-08 9:05 UTC (permalink / raw) To: dev Hi all, My platform is: uname -a Linux suse-11-sp3 3.0.77-0.11-xen #1 SMP Tue Mar 11 16:48:56 CST 2014 x86_64 x86_64 x86_64 GNU/Linux gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/4.5/lto-wrapper Target: x86_64-suse-linux Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.5 --enable-ssp --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --program-suffix=-4.5 --enable-linux-futex --without-system-libunwind --enable-gold --with-plugin-ld=/usr/bin/gold --with-arch-32=i586 --with-tune=generic --build=x86_64-suse-linux Thread model: posix gcc version 4.5.1 20101208 [gcc-4_5-branch revision 167585] (SUSE Linux) When I try to compile the source code to x86_64 linuxapp, I got this error message: lib/librte_pmd_enic/enic_main.c: In function ‘enic_set_rsskey’: lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used I dig out that, it was ome issue of the macros rte_memcpy() #define rte_memcpy(dst, src, n) \ ((__builtin_constant_p(n)) ? \ memcpy((dst), (src), (n)) : \ rte_memcpy_func((dst), (src), (n))) When I use only (n) instead of (__builtin_constant_p(n), it will pass( I know that it was incorrect, just a experiment). But I try to use inline function instead of macros: static inline void * rte_memcpy(void *dst, const void *src, size_t n) { return __builtin_constant_p(n) ? memcpy(dst, src, n) : rte_memcpy_func(dst, src, n); } It will pass:), and works, this could be one potential workaround fix. Who knows why? The root cause is what? I've no idea about this. Thanks, Michael ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-08 9:05 [dpdk-dev] error: value computed is not used Qiu, Michael @ 2014-12-08 11:00 ` Wodkowski, PawelX 2014-12-08 15:23 ` Qiu, Michael 2014-12-09 9:19 ` Qiu, Michael 2014-12-10 9:26 ` Qiu, Michael 2 siblings, 1 reply; 18+ messages in thread From: Wodkowski, PawelX @ 2014-12-08 11:00 UTC (permalink / raw) To: Qiu, Michael, dev > lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used > > I dig out that, it was ome issue of the macros rte_memcpy() > #define rte_memcpy(dst, src, n) \ > ((__builtin_constant_p(n)) ? \ > memcpy((dst), (src), (n)) : \ > rte_memcpy_func((dst), (src), (n))) > > When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > know that it was incorrect, just a experiment). > > But I try to use inline function instead of macros: > static inline void * rte_memcpy(void *dst, const void *src, size_t n) > { > return __builtin_constant_p(n) ? memcpy(dst, src, n) : > rte_memcpy_func(dst, src, n); > } > > It will pass:), and works, this could be one potential workaround fix. > > Who knows why? The root cause is what? > > I've no idea about this. > I got the same issue while ago. I don't remember exactly everything but my conclusion was that there was some bug in compiler. I think, when 'n' I constant and/or small compiler is inlining memcpy and throwing everything else (including returned value). In that case error is not produced (I think this is a bug in compiler). In other case it is computing some value calling memcpy or rte_ memcpy and you should at least explicitly throw it away by casting to void. I like solution with static inline but someone else should spoke about possible side effects. Pawel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-08 11:00 ` Wodkowski, PawelX @ 2014-12-08 15:23 ` Qiu, Michael 2014-12-08 15:26 ` Wodkowski, PawelX 0 siblings, 1 reply; 18+ messages in thread From: Qiu, Michael @ 2014-12-08 15:23 UTC (permalink / raw) To: Wodkowski, PawelX, dev On 2014/12/8 19:00, Wodkowski, PawelX wrote: >> lib/librte_pmd_enic/enic_main.c: In function ‘enic_set_rsskey’: >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used >> >> I dig out that, it was ome issue of the macros rte_memcpy() >> #define rte_memcpy(dst, src, n) \ >> ((__builtin_constant_p(n)) ? \ >> memcpy((dst), (src), (n)) : \ >> rte_memcpy_func((dst), (src), (n))) >> >> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I >> know that it was incorrect, just a experiment). >> >> But I try to use inline function instead of macros: >> static inline void * rte_memcpy(void *dst, const void *src, size_t n) >> { >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : >> rte_memcpy_func(dst, src, n); >> } >> >> It will pass:), and works, this could be one potential workaround fix. >> >> Who knows why? The root cause is what? >> >> I've no idea about this. >> > I got the same issue while ago. I don't remember exactly everything > but my conclusion was that there was some bug in compiler. I think, > when 'n' I constant and/or small compiler is inlining memcpy and throwing > everything else (including returned value). In that case error is not > produced (I think this is a bug in compiler). In other case it is computing > some value calling memcpy or rte_ memcpy and you should at least > explicitly throw it away by casting to void. I like solution with static Actually, I try to pass "n" as a Int value like 4, it still report this error :) > inline but someone else should spoke about possible side effects. Yes, but as I know inline is better than macros. Thanks, Michael > > Pawel > > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-08 15:23 ` Qiu, Michael @ 2014-12-08 15:26 ` Wodkowski, PawelX 2014-12-15 10:54 ` Thomas Monjalon 0 siblings, 1 reply; 18+ messages in thread From: Wodkowski, PawelX @ 2014-12-08 15:26 UTC (permalink / raw) To: Qiu, Michael, dev > -----Original Message----- > From: Qiu, Michael > Sent: Monday, December 08, 2014 4:24 PM > To: Wodkowski, PawelX; dev@dpdk.org > Subject: Re: error: value computed is not used > > On 2014/12/8 19:00, Wodkowski, PawelX wrote: > >> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used > >> > >> I dig out that, it was ome issue of the macros rte_memcpy() > >> #define rte_memcpy(dst, src, n) \ > >> ((__builtin_constant_p(n)) ? \ > >> memcpy((dst), (src), (n)) : \ > >> rte_memcpy_func((dst), (src), (n))) > >> > >> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > >> know that it was incorrect, just a experiment). > >> > >> But I try to use inline function instead of macros: > >> static inline void * rte_memcpy(void *dst, const void *src, size_t n) > >> { > >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : > >> rte_memcpy_func(dst, src, n); > >> } > >> > >> It will pass:), and works, this could be one potential workaround fix. > >> > >> Who knows why? The root cause is what? > >> > >> I've no idea about this. > >> > > I got the same issue while ago. I don't remember exactly everything > > but my conclusion was that there was some bug in compiler. I think, > > when 'n' I constant and/or small compiler is inlining memcpy and throwing > > everything else (including returned value). In that case error is not > > produced (I think this is a bug in compiler). In other case it is computing > > some value calling memcpy or rte_ memcpy and you should at least > > explicitly throw it away by casting to void. I like solution with static > > Actually, I try to pass "n" as a Int value like 4, it still report this > error :) My workaround was: (void) rte_memcpy(...); But this is only a workaround. > > > inline but someone else should spoke about possible side effects. > > Yes, but as I know inline is better than macros. > > Thanks, > Michael > > > > Pawel > > > > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-08 15:26 ` Wodkowski, PawelX @ 2014-12-15 10:54 ` Thomas Monjalon 2014-12-15 11:07 ` [dpdk-dev] [PATCH] enic: fix build on SUSE 11 Thomas Monjalon ` (2 more replies) 0 siblings, 3 replies; 18+ messages in thread From: Thomas Monjalon @ 2014-12-15 10:54 UTC (permalink / raw) To: Wodkowski, PawelX, Qiu, Michael; +Cc: dev 2014-12-08 15:26, Wodkowski, PawelX: > From: Qiu, Michael > > On 2014/12/8 19:00, Wodkowski, PawelX wrote: > > >> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > > >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used > > >> > > >> I dig out that, it was ome issue of the macros rte_memcpy() > > >> #define rte_memcpy(dst, src, n) \ > > >> ((__builtin_constant_p(n)) ? \ > > >> memcpy((dst), (src), (n)) : \ > > >> rte_memcpy_func((dst), (src), (n))) > > >> > > >> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > > >> know that it was incorrect, just a experiment). > > >> > > >> But I try to use inline function instead of macros: > > >> static inline void * rte_memcpy(void *dst, const void *src, size_t n) > > >> { > > >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : > > >> rte_memcpy_func(dst, src, n); > > >> } > > >> > > >> It will pass:), and works, this could be one potential workaround fix. > > >> > > >> Who knows why? The root cause is what? > > >> > > >> I've no idea about this. > > >> > > > I got the same issue while ago. I don't remember exactly everything > > > but my conclusion was that there was some bug in compiler. I think, > > > when 'n' I constant and/or small compiler is inlining memcpy and throwing > > > everything else (including returned value). In that case error is not > > > produced (I think this is a bug in compiler). In other case it is computing > > > some value calling memcpy or rte_ memcpy and you should at least > > > explicitly throw it away by casting to void. I like solution with static > > > > Actually, I try to pass "n" as a Int value like 4, it still report this > > error :) > > My workaround was: > (void) rte_memcpy(...); > > But this is only a workaround. It's not so bad. > > > inline but someone else should spoke about possible side effects. > > > > Yes, but as I know inline is better than macros. >From the GCC manual: " You may use this built-in function in either a macro or an inline function. However, if you use it in an inlined function and pass an argument of the function as the argument to the built-in, GCC never returns 1 when you call the inline function with a string constant or compound literal and does not return 1 when you pass a constant numeric value to the inline function unless you specify the -O option. " It seems the "inline fix" cannot be used. I'm going to send a patch with Pawel's workaround. -- Thomas ^ permalink raw reply [flat|nested] 18+ messages in thread
* [dpdk-dev] [PATCH] enic: fix build on SUSE 11 2014-12-15 10:54 ` Thomas Monjalon @ 2014-12-15 11:07 ` Thomas Monjalon 2014-12-15 11:27 ` [dpdk-dev] error: value computed is not used Wodkowski, PawelX 2014-12-16 0:49 ` Qiu, Michael 2 siblings, 0 replies; 18+ messages in thread From: Thomas Monjalon @ 2014-12-15 11:07 UTC (permalink / raw) To: dev GCC 4.5.1 from SUSE throws this error: lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used It seems to be a GCC bug. Reported-by: Michael Qiu <michael.qiu@intel.com> Suggested-by: Pawel Wodkowski <pawelx.wodkowski@intel.com> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> --- lib/librte_pmd_enic/enic_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/librte_pmd_enic/enic_main.c b/lib/librte_pmd_enic/enic_main.c index e4f43c5..8cfb6e3 100644 --- a/lib/librte_pmd_enic/enic_main.c +++ b/lib/librte_pmd_enic/enic_main.c @@ -858,7 +858,8 @@ static int enic_set_rsskey(struct enic *enic) if (!rss_key_buf_va) return -ENOMEM; - rte_memcpy(rss_key_buf_va, &rss_key, sizeof(union vnic_rss_key)); + /* ignore return to workaround a bug seen with GCC 4.5.1 on SUSE 11 SP3 */ + (void) rte_memcpy(rss_key_buf_va, &rss_key, sizeof(union vnic_rss_key)); err = enic_set_rss_key(enic, rss_key_buf_pa, -- 2.1.3 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 10:54 ` Thomas Monjalon 2014-12-15 11:07 ` [dpdk-dev] [PATCH] enic: fix build on SUSE 11 Thomas Monjalon @ 2014-12-15 11:27 ` Wodkowski, PawelX 2014-12-15 13:26 ` Thomas Monjalon 2014-12-16 0:49 ` Qiu, Michael 2 siblings, 1 reply; 18+ messages in thread From: Wodkowski, PawelX @ 2014-12-15 11:27 UTC (permalink / raw) To: Thomas Monjalon, Qiu, Michael; +Cc: dev > -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > Sent: Monday, December 15, 2014 11:55 AM > To: Wodkowski, PawelX; Qiu, Michael > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] error: value computed is not used > > 2014-12-08 15:26, Wodkowski, PawelX: > > From: Qiu, Michael > > > On 2014/12/8 19:00, Wodkowski, PawelX wrote: > > > >> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > > > >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used > > > >> > > > >> I dig out that, it was ome issue of the macros rte_memcpy() > > > >> #define rte_memcpy(dst, src, n) \ > > > >> ((__builtin_constant_p(n)) ? \ > > > >> memcpy((dst), (src), (n)) : \ > > > >> rte_memcpy_func((dst), (src), (n))) > > > >> > > > >> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > > > >> know that it was incorrect, just a experiment). > > > >> > > > >> But I try to use inline function instead of macros: > > > >> static inline void * rte_memcpy(void *dst, const void *src, size_t n) > > > >> { > > > >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : > > > >> rte_memcpy_func(dst, src, n); > > > >> } > > > >> > > > >> It will pass:), and works, this could be one potential workaround fix. > > > >> > > > >> Who knows why? The root cause is what? > > > >> > > > >> I've no idea about this. > > > >> > > > > I got the same issue while ago. I don't remember exactly everything > > > > but my conclusion was that there was some bug in compiler. I think, > > > > when 'n' I constant and/or small compiler is inlining memcpy and throwing > > > > everything else (including returned value). In that case error is not > > > > produced (I think this is a bug in compiler). In other case it is computing > > > > some value calling memcpy or rte_ memcpy and you should at least > > > > explicitly throw it away by casting to void. I like solution with static > > > > > > Actually, I try to pass "n" as a Int value like 4, it still report this > > > error :) > > > > My workaround was: > > (void) rte_memcpy(...); > > > > But this is only a workaround. > > It's not so bad. > > > > > inline but someone else should spoke about possible side effects. > > > > > > Yes, but as I know inline is better than macros. > > From the GCC manual: > " > You may use this built-in function in either a macro or an inline function. > However, if you use it in an inlined function and pass an argument of the > function as the argument to the built-in, GCC never returns 1 when you call > the inline function with a string constant or compound literal and does not > return 1 when you pass a constant numeric value to the inline function unless > you specify the -O option. > " > > It seems the "inline fix" cannot be used. > > I'm going to send a patch with Pawel's workaround. And something like this? diff --git a/lib/librte_eal/common/include/arch/x86/rte_memcpy.h b/lib/librte_eal/common/include/arch/x86/rte_memcpy.h index 290c5cd..906c911 100644 --- a/lib/librte_eal/common/include/arch/x86/rte_memcpy.h +++ b/lib/librte_eal/common/include/arch/x86/rte_memcpy.h @@ -168,10 +168,10 @@ rte_mov128(dst + 128, src + 128); } diff --git a/lib/librte_eal/common/include/arch/x86/rte_memcpy.h b/lib/librte_eal/common/include/arch/x86/rte_memcpy.h index 290c5cd..c3e8b81 100644 --- a/lib/librte_eal/common/include/arch/x86/rte_memcpy.h +++ b/lib/librte_eal/common/include/arch/x86/rte_memcpy.h @@ -169,9 +169,9 @@ } #define rte_memcpy(dst, src, n) \ - ((__builtin_constant_p(n)) ? \ + ({ (__builtin_constant_p(n)) ? \ memcpy((dst), (src), (n)) : \ - rte_memcpy_func((dst), (src), (n))) + rte_memcpy_func((dst), (src), (n)); }) static inline void * rte_memcpy_func(void *dst, const void *src, size_t n) Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. /home/pwodkowx/grizzly/dpdk_org_declan_v3_mode4_v2/lib/librte_pmd_ixgbe/ixgbe/ixgbe_common.c: In function 'ixgbe_host_interface_command': /home/pwodkowx/grizzly/dpdk_org_declan_v3_mode4_v2/lib/librte_pmd_ixgbe/ixgbe/ixgbe_common.c:4429:3: error: statement with no effect [-Werror=unused-value] /home/pwodkowx/grizzly/dpdk_org_declan_v3_mode4_v2/lib/librte_pmd_ixgbe/ixgbe/ixgbe_common.c:4448:3: error: statement with no effect [-Werror=unused-value] ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 11:27 ` [dpdk-dev] error: value computed is not used Wodkowski, PawelX @ 2014-12-15 13:26 ` Thomas Monjalon 2014-12-15 13:47 ` Wodkowski, PawelX 0 siblings, 1 reply; 18+ messages in thread From: Thomas Monjalon @ 2014-12-15 13:26 UTC (permalink / raw) To: Wodkowski, PawelX; +Cc: dev 2014-12-15 11:27, Wodkowski, PawelX: > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > 2014-12-08 15:26, Wodkowski, PawelX: > > > From: Qiu, Michael > > > > On 2014/12/8 19:00, Wodkowski, PawelX wrote: > > > > >> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > > > > >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used > > > > >> > > > > >> I dig out that, it was ome issue of the macros rte_memcpy() > > > > >> #define rte_memcpy(dst, src, n) \ > > > > >> ((__builtin_constant_p(n)) ? \ > > > > >> memcpy((dst), (src), (n)) : \ > > > > >> rte_memcpy_func((dst), (src), (n))) > > > > >> > > > > >> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > > > > >> know that it was incorrect, just a experiment). > > > > >> > > > > >> But I try to use inline function instead of macros: > > > > >> static inline void * rte_memcpy(void *dst, const void *src, size_t n) > > > > >> { > > > > >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : > > > > >> rte_memcpy_func(dst, src, n); > > > > >> } > > > > >> > > > > >> It will pass:), and works, this could be one potential workaround fix. > > > > >> > > > > >> Who knows why? The root cause is what? > > > > >> > > > > >> I've no idea about this. > > > > >> > > > > > I got the same issue while ago. I don't remember exactly everything > > > > > but my conclusion was that there was some bug in compiler. I think, > > > > > when 'n' I constant and/or small compiler is inlining memcpy and throwing > > > > > everything else (including returned value). In that case error is not > > > > > produced (I think this is a bug in compiler). In other case it is computing > > > > > some value calling memcpy or rte_ memcpy and you should at least > > > > > explicitly throw it away by casting to void. I like solution with static > > > > > > > > Actually, I try to pass "n" as a Int value like 4, it still report this > > > > error :) > > > > > > My workaround was: > > > (void) rte_memcpy(...); > > > > > > But this is only a workaround. > > > > It's not so bad. > > > > > > > inline but someone else should spoke about possible side effects. > > > > > > > > Yes, but as I know inline is better than macros. > > > > From the GCC manual: > > " > > You may use this built-in function in either a macro or an inline function. > > However, if you use it in an inlined function and pass an argument of the > > function as the argument to the built-in, GCC never returns 1 when you call > > the inline function with a string constant or compound literal and does not > > return 1 when you pass a constant numeric value to the inline function unless > > you specify the -O option. > > " > > > > It seems the "inline fix" cannot be used. > > > > I'm going to send a patch with Pawel's workaround. > > And something like this? > > #define rte_memcpy(dst, src, n) \ > - ((__builtin_constant_p(n)) ? \ > + ({ (__builtin_constant_p(n)) ? \ > memcpy((dst), (src), (n)) : \ > - rte_memcpy_func((dst), (src), (n))) > + rte_memcpy_func((dst), (src), (n)); }) What happens to the returned value after this change? ptr = rte_memcpy(dst, src, n) + offset: > Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. You mean EXTRA_CFLAGS (with a S). It fails in many locations. What's your point? Do you to support -Wunused-value? -- Thomas ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 13:26 ` Thomas Monjalon @ 2014-12-15 13:47 ` Wodkowski, PawelX 2014-12-15 14:16 ` Thomas Monjalon 0 siblings, 1 reply; 18+ messages in thread From: Wodkowski, PawelX @ 2014-12-15 13:47 UTC (permalink / raw) To: Thomas Monjalon; +Cc: dev > -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > Sent: Monday, December 15, 2014 2:27 PM > To: Wodkowski, PawelX > Cc: Qiu, Michael; dev@dpdk.org > Subject: Re: [dpdk-dev] error: value computed is not used > > 2014-12-15 11:27, Wodkowski, PawelX: > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > > 2014-12-08 15:26, Wodkowski, PawelX: > > > > From: Qiu, Michael > > > > > On 2014/12/8 19:00, Wodkowski, PawelX wrote: > > > > > >> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > > > > > >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not > used > > > > > >> > > > > > >> I dig out that, it was ome issue of the macros rte_memcpy() > > > > > >> #define rte_memcpy(dst, src, n) \ > > > > > >> ((__builtin_constant_p(n)) ? \ > > > > > >> memcpy((dst), (src), (n)) : \ > > > > > >> rte_memcpy_func((dst), (src), (n))) > > > > > >> > > > > > >> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > > > > > >> know that it was incorrect, just a experiment). > > > > > >> > > > > > >> But I try to use inline function instead of macros: > > > > > >> static inline void * rte_memcpy(void *dst, const void *src, size_t n) > > > > > >> { > > > > > >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : > > > > > >> rte_memcpy_func(dst, src, n); > > > > > >> } > > > > > >> > > > > > >> It will pass:), and works, this could be one potential workaround fix. > > > > > >> > > > > > >> Who knows why? The root cause is what? > > > > > >> > > > > > >> I've no idea about this. > > > > > >> > > > > > > I got the same issue while ago. I don't remember exactly everything > > > > > > but my conclusion was that there was some bug in compiler. I think, > > > > > > when 'n' I constant and/or small compiler is inlining memcpy and > throwing > > > > > > everything else (including returned value). In that case error is not > > > > > > produced (I think this is a bug in compiler). In other case it is computing > > > > > > some value calling memcpy or rte_ memcpy and you should at least > > > > > > explicitly throw it away by casting to void. I like solution with static > > > > > > > > > > Actually, I try to pass "n" as a Int value like 4, it still report this > > > > > error :) > > > > > > > > My workaround was: > > > > (void) rte_memcpy(...); > > > > > > > > But this is only a workaround. > > > > > > It's not so bad. > > > > > > > > > inline but someone else should spoke about possible side effects. > > > > > > > > > > Yes, but as I know inline is better than macros. > > > > > > From the GCC manual: > > > " > > > You may use this built-in function in either a macro or an inline function. > > > However, if you use it in an inlined function and pass an argument of the > > > function as the argument to the built-in, GCC never returns 1 when you call > > > the inline function with a string constant or compound literal and does not > > > return 1 when you pass a constant numeric value to the inline function unless > > > you specify the -O option. > > > " > > > > > > It seems the "inline fix" cannot be used. > > > > > > I'm going to send a patch with Pawel's workaround. > > > > And something like this? > > > > #define rte_memcpy(dst, src, n) \ > > - ((__builtin_constant_p(n)) ? \ > > + ({ (__builtin_constant_p(n)) ? \ > > memcpy((dst), (src), (n)) : \ > > - rte_memcpy_func((dst), (src), (n))) > > + rte_memcpy_func((dst), (src), (n)); }) > > What happens to the returned value after this change? > ptr = rte_memcpy(dst, src, n) + offset: > https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement-Exprs Whole expression should be 'void *' type (like *memcpy()) and it should work as usual (see maxint() example in above link). It is GCC extension. > > Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. > > You mean EXTRA_CFLAGS (with a S). > It fails in many locations. > What's your point? I am just asking if this is an typo, error or intend to do statements with no effects like bellow. ixgbe_common.c:4429:3: error: statement with no effect [-Werror=unused-value] 4426: /* first pull in the header so we know the buffer length */ 4427: for (bi = 0; bi < dword_len; bi++) { 4428: buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, bi); 4429: IXGBE_LE32_TO_CPUS(&buffer[bi]); // <------ here 4430 } > Do you to support -Wunused-value? No, I just turned this on to check above change and was surprised what happened. -- Pawel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 13:47 ` Wodkowski, PawelX @ 2014-12-15 14:16 ` Thomas Monjalon 2014-12-15 15:44 ` Wodkowski, PawelX ` (2 more replies) 0 siblings, 3 replies; 18+ messages in thread From: Thomas Monjalon @ 2014-12-15 14:16 UTC (permalink / raw) To: Wodkowski, PawelX; +Cc: dev 2014-12-15 13:47, Wodkowski, PawelX: > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > 2014-12-15 11:27, Wodkowski, PawelX: > > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > > > 2014-12-08 15:26, Wodkowski, PawelX: > > > > > From: Qiu, Michael > > > > > > On 2014/12/8 19:00, Wodkowski, PawelX wrote: > > > > > > >> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > > > > > > >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not > > used > > > > > > >> > > > > > > >> I dig out that, it was ome issue of the macros rte_memcpy() > > > > > > >> #define rte_memcpy(dst, src, n) \ > > > > > > >> ((__builtin_constant_p(n)) ? \ > > > > > > >> memcpy((dst), (src), (n)) : \ > > > > > > >> rte_memcpy_func((dst), (src), (n))) > > > > > > >> > > > > > > >> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > > > > > > >> know that it was incorrect, just a experiment). > > > > > > >> > > > > > > >> But I try to use inline function instead of macros: > > > > > > >> static inline void * rte_memcpy(void *dst, const void *src, size_t n) > > > > > > >> { > > > > > > >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : > > > > > > >> rte_memcpy_func(dst, src, n); > > > > > > >> } > > > > > > >> > > > > > > >> It will pass:), and works, this could be one potential workaround fix. > > > > > > >> > > > > > > >> Who knows why? The root cause is what? > > > > > > >> > > > > > > >> I've no idea about this. > > > > > > >> > > > > > > > I got the same issue while ago. I don't remember exactly everything > > > > > > > but my conclusion was that there was some bug in compiler. I think, > > > > > > > when 'n' I constant and/or small compiler is inlining memcpy and > > throwing > > > > > > > everything else (including returned value). In that case error is not > > > > > > > produced (I think this is a bug in compiler). In other case it is computing > > > > > > > some value calling memcpy or rte_ memcpy and you should at least > > > > > > > explicitly throw it away by casting to void. I like solution with static > > > > > > > > > > > > Actually, I try to pass "n" as a Int value like 4, it still report this > > > > > > error :) > > > > > > > > > > My workaround was: > > > > > (void) rte_memcpy(...); > > > > > > > > > > But this is only a workaround. > > > > > > > > It's not so bad. > > > > > > > > > > > inline but someone else should spoke about possible side effects. > > > > > > > > > > > > Yes, but as I know inline is better than macros. > > > > > > > > From the GCC manual: > > > > " > > > > You may use this built-in function in either a macro or an inline function. > > > > However, if you use it in an inlined function and pass an argument of the > > > > function as the argument to the built-in, GCC never returns 1 when you call > > > > the inline function with a string constant or compound literal and does not > > > > return 1 when you pass a constant numeric value to the inline function unless > > > > you specify the -O option. > > > > " > > > > > > > > It seems the "inline fix" cannot be used. > > > > > > > > I'm going to send a patch with Pawel's workaround. > > > > > > And something like this? > > > > > > #define rte_memcpy(dst, src, n) \ > > > - ((__builtin_constant_p(n)) ? \ > > > + ({ (__builtin_constant_p(n)) ? \ > > > memcpy((dst), (src), (n)) : \ > > > - rte_memcpy_func((dst), (src), (n))) > > > + rte_memcpy_func((dst), (src), (n)); }) > > > > What happens to the returned value after this change? > > ptr = rte_memcpy(dst, src, n) + offset: > > > https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement-Exprs > > Whole expression should be 'void *' type (like *memcpy()) and it should work > as usual (see maxint() example in above link). It is GCC extension. OK nice. I didn't test it on SUSE 11 SP3. I assume you did it? Please Pawel, could you send a proper patch quickly? If nobody disagree, it'll be merged in RC5 today. > > > Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. > > > > You mean EXTRA_CFLAGS (with a S). > > It fails in many locations. > > What's your point? > > I am just asking if this is an typo, error or intend to do statements with no effects like bellow. > > ixgbe_common.c:4429:3: error: statement with no effect [-Werror=unused-value] > > 4426: /* first pull in the header so we know the buffer length */ > 4427: for (bi = 0; bi < dword_len; bi++) { > 4428: buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, bi); > 4429: IXGBE_LE32_TO_CPUS(&buffer[bi]); // <------ here > 4430 } It's an intent. On big endian CPU, this has an effect. > > Do you to support -Wunused-value? > > No, I just turned this on to check above change and was surprised what happened. Honestly, I don't know if there is a good fix for this warning. -- Thomas ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 14:16 ` Thomas Monjalon @ 2014-12-15 15:44 ` Wodkowski, PawelX 2014-12-15 16:35 ` Ananyev, Konstantin 2014-12-15 16:00 ` Ananyev, Konstantin 2014-12-15 17:03 ` Jastrzebski, MichalX K 2 siblings, 1 reply; 18+ messages in thread From: Wodkowski, PawelX @ 2014-12-15 15:44 UTC (permalink / raw) To: Thomas Monjalon; +Cc: dev > > > > And something like this? > > > > > > > > #define rte_memcpy(dst, src, n) \ > > > > - ((__builtin_constant_p(n)) ? \ > > > > + ({ (__builtin_constant_p(n)) ? \ > > > > memcpy((dst), (src), (n)) : \ > > > > - rte_memcpy_func((dst), (src), (n))) > > > > + rte_memcpy_func((dst), (src), (n)); }) > > > > > > What happens to the returned value after this change? > > > ptr = rte_memcpy(dst, src, n) + offset: > > > > > https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement-Exprs > > > > Whole expression should be 'void *' type (like *memcpy()) and it should work > > as usual (see maxint() example in above link). It is GCC extension. > > OK nice. > I didn't test it on SUSE 11 SP3. I assume you did it? I did not tested this, as this was only proposal. I only run build process and it pass. Patch proposal will be sent in a while. > Please Pawel, could you send a proper patch quickly? > If nobody disagree, it'll be merged in RC5 today. > > > > > Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. > > > > > > You mean EXTRA_CFLAGS (with a S). > > > It fails in many locations. > > > What's your point? > > > > I am just asking if this is an typo, error or intend to do statements with no > effects like bellow. > > > > ixgbe_common.c:4429:3: error: statement with no effect [-Werror=unused- > value] > > > > 4426: /* first pull in the header so we know the buffer length */ > > 4427: for (bi = 0; bi < dword_len; bi++) { > > 4428: buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, > bi); > > 4429: IXGBE_LE32_TO_CPUS(&buffer[bi]); // <------ here > > 4430 } > > It's an intent. On big endian CPU, this has an effect. > If you see something what I am not, please ignore this part but for me this looks like it should be: tmp = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, buffer[bi] = IXGBE_LE32_TO_CPUS (tmp); Pawel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 15:44 ` Wodkowski, PawelX @ 2014-12-15 16:35 ` Ananyev, Konstantin 0 siblings, 0 replies; 18+ messages in thread From: Ananyev, Konstantin @ 2014-12-15 16:35 UTC (permalink / raw) To: Wodkowski, PawelX, Thomas Monjalon; +Cc: dev > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wodkowski, PawelX > Sent: Monday, December 15, 2014 3:44 PM > To: Thomas Monjalon > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] error: value computed is not used > > > > > > And something like this? > > > > > > > > > > #define rte_memcpy(dst, src, n) \ > > > > > - ((__builtin_constant_p(n)) ? \ > > > > > + ({ (__builtin_constant_p(n)) ? \ > > > > > memcpy((dst), (src), (n)) : \ > > > > > - rte_memcpy_func((dst), (src), (n))) > > > > > + rte_memcpy_func((dst), (src), (n)); }) > > > > > > > > What happens to the returned value after this change? > > > > ptr = rte_memcpy(dst, src, n) + offset: > > > > > > > https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement-Exprs > > > > > > Whole expression should be 'void *' type (like *memcpy()) and it should work > > > as usual (see maxint() example in above link). It is GCC extension. > > > > OK nice. > > I didn't test it on SUSE 11 SP3. I assume you did it? > I did not tested this, as this was only proposal. I only run build process and it pass. > Patch proposal will be sent in a while. > > > Please Pawel, could you send a proper patch quickly? > > If nobody disagree, it'll be merged in RC5 today. > > > > > > > Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. > > > > > > > > You mean EXTRA_CFLAGS (with a S). > > > > It fails in many locations. > > > > What's your point? > > > > > > I am just asking if this is an typo, error or intend to do statements with no > > effects like bellow. > > > > > > ixgbe_common.c:4429:3: error: statement with no effect [-Werror=unused- > > value] > > > > > > 4426: /* first pull in the header so we know the buffer length */ > > > 4427: for (bi = 0; bi < dword_len; bi++) { > > > 4428: buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, > > bi); > > > 4429: IXGBE_LE32_TO_CPUS(&buffer[bi]); // <------ here > > > 4430 } > > > > It's an intent. On big endian CPU, this has an effect. > > > > If you see something what I am not, please ignore this part but for me this looks like it should be: > tmp = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, > buffer[bi] = IXGBE_LE32_TO_CPUS (tmp); Yep, same thought here, see my other mail on that subject. Konstantin > > Pawel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 14:16 ` Thomas Monjalon 2014-12-15 15:44 ` Wodkowski, PawelX @ 2014-12-15 16:00 ` Ananyev, Konstantin 2014-12-15 16:40 ` Thomas Monjalon 2014-12-15 17:03 ` Jastrzebski, MichalX K 2 siblings, 1 reply; 18+ messages in thread From: Ananyev, Konstantin @ 2014-12-15 16:00 UTC (permalink / raw) To: Thomas Monjalon, Wodkowski, PawelX; +Cc: dev > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Thomas Monjalon > Sent: Monday, December 15, 2014 2:17 PM > To: Wodkowski, PawelX > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] error: value computed is not used > > 2014-12-15 13:47, Wodkowski, PawelX: > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > > 2014-12-15 11:27, Wodkowski, PawelX: > > > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > > > > 2014-12-08 15:26, Wodkowski, PawelX: > > > > > > From: Qiu, Michael > > > > > > > On 2014/12/8 19:00, Wodkowski, PawelX wrote: > > > > > > > >> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > > > > > > > >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not > > > used > > > > > > > >> > > > > > > > >> I dig out that, it was ome issue of the macros rte_memcpy() > > > > > > > >> #define rte_memcpy(dst, src, n) \ > > > > > > > >> ((__builtin_constant_p(n)) ? \ > > > > > > > >> memcpy((dst), (src), (n)) : \ > > > > > > > >> rte_memcpy_func((dst), (src), (n))) > > > > > > > >> > > > > > > > >> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > > > > > > > >> know that it was incorrect, just a experiment). > > > > > > > >> > > > > > > > >> But I try to use inline function instead of macros: > > > > > > > >> static inline void * rte_memcpy(void *dst, const void *src, size_t n) > > > > > > > >> { > > > > > > > >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : > > > > > > > >> rte_memcpy_func(dst, src, n); > > > > > > > >> } > > > > > > > >> > > > > > > > >> It will pass:), and works, this could be one potential workaround fix. > > > > > > > >> > > > > > > > >> Who knows why? The root cause is what? > > > > > > > >> > > > > > > > >> I've no idea about this. > > > > > > > >> > > > > > > > > I got the same issue while ago. I don't remember exactly everything > > > > > > > > but my conclusion was that there was some bug in compiler. I think, > > > > > > > > when 'n' I constant and/or small compiler is inlining memcpy and > > > throwing > > > > > > > > everything else (including returned value). In that case error is not > > > > > > > > produced (I think this is a bug in compiler). In other case it is computing > > > > > > > > some value calling memcpy or rte_ memcpy and you should at least > > > > > > > > explicitly throw it away by casting to void. I like solution with static > > > > > > > > > > > > > > Actually, I try to pass "n" as a Int value like 4, it still report this > > > > > > > error :) > > > > > > > > > > > > My workaround was: > > > > > > (void) rte_memcpy(...); > > > > > > > > > > > > But this is only a workaround. > > > > > > > > > > It's not so bad. > > > > > > > > > > > > > inline but someone else should spoke about possible side effects. > > > > > > > > > > > > > > Yes, but as I know inline is better than macros. > > > > > > > > > > From the GCC manual: > > > > > " > > > > > You may use this built-in function in either a macro or an inline function. > > > > > However, if you use it in an inlined function and pass an argument of the > > > > > function as the argument to the built-in, GCC never returns 1 when you call > > > > > the inline function with a string constant or compound literal and does not > > > > > return 1 when you pass a constant numeric value to the inline function unless > > > > > you specify the -O option. > > > > > " > > > > > > > > > > It seems the "inline fix" cannot be used. > > > > > > > > > > I'm going to send a patch with Pawel's workaround. > > > > > > > > And something like this? > > > > > > > > #define rte_memcpy(dst, src, n) \ > > > > - ((__builtin_constant_p(n)) ? \ > > > > + ({ (__builtin_constant_p(n)) ? \ > > > > memcpy((dst), (src), (n)) : \ > > > > - rte_memcpy_func((dst), (src), (n))) > > > > + rte_memcpy_func((dst), (src), (n)); }) > > > > > > What happens to the returned value after this change? > > > ptr = rte_memcpy(dst, src, n) + offset: > > > > > https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement-Exprs > > > > Whole expression should be 'void *' type (like *memcpy()) and it should work > > as usual (see maxint() example in above link). It is GCC extension. > > OK nice. > I didn't test it on SUSE 11 SP3. I assume you did it? > Please Pawel, could you send a proper patch quickly? > If nobody disagree, it'll be merged in RC5 today. > > > > > Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. > > > > > > You mean EXTRA_CFLAGS (with a S). > > > It fails in many locations. > > > What's your point? > > > > I am just asking if this is an typo, error or intend to do statements with no effects like bellow. > > > > ixgbe_common.c:4429:3: error: statement with no effect [-Werror=unused-value] > > > > 4426: /* first pull in the header so we know the buffer length */ > > 4427: for (bi = 0; bi < dword_len; bi++) { > > 4428: buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, bi); > > 4429: IXGBE_LE32_TO_CPUS(&buffer[bi]); // <------ here > > 4430 } > > It's an intent. On big endian CPU, this has an effect. Hmm, I think there is a bug in lib/librte_pmd_ixgbe/ixgbe/ixgbe_osdep.h: #define IXGBE_LE32_TO_CPUS(_i) rte_le_to_cpu_32(_i) It probably should be: #define IXGBE_LE32_TO_CPUS(_i) rte_le_to_cpu_32(*(_i)) Not much point to do byte swapping for the pointer. And that what ixgbe BSD driver is doing. Though I still not sure why it is needed here, as the computed value is not used anyway. What the author probably meant to do: buffer[bi] = rte_le_to_cpu_32 (buffer[bi]); To achieve that we need: #define IXGBE_LE32_TO_CPUS(x) (*(x) = rte_le_to_cpu_32(*(x))) Correct? Konstantin > > > > Do you to support -Wunused-value? > > > > No, I just turned this on to check above change and was surprised what happened. > > Honestly, I don't know if there is a good fix for this warning. > > -- > Thomas ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 16:00 ` Ananyev, Konstantin @ 2014-12-15 16:40 ` Thomas Monjalon 0 siblings, 0 replies; 18+ messages in thread From: Thomas Monjalon @ 2014-12-15 16:40 UTC (permalink / raw) To: Ananyev, Konstantin; +Cc: dev 2014-12-15 16:00, Ananyev, Konstantin: > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Thomas Monjalon > > 2014-12-15 13:47, Wodkowski, PawelX: > > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > > > 2014-12-15 11:27, Wodkowski, PawelX: > > > > > Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. > > > > > > > > You mean EXTRA_CFLAGS (with a S). > > > > It fails in many locations. > > > > What's your point? > > > > > > I am just asking if this is an typo, error or intend to do statements with no effects like bellow. > > > > > > ixgbe_common.c:4429:3: error: statement with no effect [-Werror=unused-value] > > > > > > 4426: /* first pull in the header so we know the buffer length */ > > > 4427: for (bi = 0; bi < dword_len; bi++) { > > > 4428: buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, bi); > > > 4429: IXGBE_LE32_TO_CPUS(&buffer[bi]); // <------ here > > > 4430 } > > > > It's an intent. On big endian CPU, this has an effect. > > Hmm, I think there is a bug in lib/librte_pmd_ixgbe/ixgbe/ixgbe_osdep.h: > #define IXGBE_LE32_TO_CPUS(_i) rte_le_to_cpu_32(_i) > > It probably should be: > #define IXGBE_LE32_TO_CPUS(_i) rte_le_to_cpu_32(*(_i)) > > Not much point to do byte swapping for the pointer. > And that what ixgbe BSD driver is doing. > > Though I still not sure why it is needed here, as the computed value is not used anyway. > What the author probably meant to do: > buffer[bi] = rte_le_to_cpu_32 (buffer[bi]); > To achieve that we need: > #define IXGBE_LE32_TO_CPUS(x) (*(x) = rte_le_to_cpu_32(*(x))) > Correct? Oh yes, you and Pawel are probably right. I was focusing on definition of IXGBE_LE32_TO_CPUS and have not seen the bug. > > > > Do you to support -Wunused-value? > > > > > > No, I just turned this on to check above change and was surprised what happened. > > > > Honestly, I don't know if there is a good fix for this warning. -- Thomas ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 14:16 ` Thomas Monjalon 2014-12-15 15:44 ` Wodkowski, PawelX 2014-12-15 16:00 ` Ananyev, Konstantin @ 2014-12-15 17:03 ` Jastrzebski, MichalX K 2 siblings, 0 replies; 18+ messages in thread From: Jastrzebski, MichalX K @ 2014-12-15 17:03 UTC (permalink / raw) To: Thomas Monjalon, Wodkowski, PawelX; +Cc: dev > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Thomas Monjalon > Sent: Monday, December 15, 2014 3:17 PM > To: Wodkowski, PawelX > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] error: value computed is not used > > 2014-12-15 13:47, Wodkowski, PawelX: > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > > 2014-12-15 11:27, Wodkowski, PawelX: > > > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > > > > 2014-12-08 15:26, Wodkowski, PawelX: > > > > > > From: Qiu, Michael > > > > > > > On 2014/12/8 19:00, Wodkowski, PawelX wrote: > > > > > > > >> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': > > > > > > > >> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is > not > > > used > > > > > > > >> > > > > > > > >> I dig out that, it was ome issue of the macros rte_memcpy() > > > > > > > >> #define rte_memcpy(dst, src, n) \ > > > > > > > >> ((__builtin_constant_p(n)) ? \ > > > > > > > >> memcpy((dst), (src), (n)) : \ > > > > > > > >> rte_memcpy_func((dst), (src), (n))) > > > > > > > >> > > > > > > > >> When I use only (n) instead of (__builtin_constant_p(n), it will > pass( I > > > > > > > >> know that it was incorrect, just a experiment). > > > > > > > >> > > > > > > > >> But I try to use inline function instead of macros: > > > > > > > >> static inline void * rte_memcpy(void *dst, const void *src, size_t > n) > > > > > > > >> { > > > > > > > >> return __builtin_constant_p(n) ? memcpy(dst, src, n) : > > > > > > > >> rte_memcpy_func(dst, src, n); > > > > > > > >> } > > > > > > > >> > > > > > > > >> It will pass:), and works, this could be one potential workaround > fix. > > > > > > > >> > > > > > > > >> Who knows why? The root cause is what? > > > > > > > >> > > > > > > > >> I've no idea about this. > > > > > > > >> > > > > > > > > I got the same issue while ago. I don't remember exactly > everything > > > > > > > > but my conclusion was that there was some bug in compiler. I > think, > > > > > > > > when 'n' I constant and/or small compiler is inlining memcpy and > > > throwing > > > > > > > > everything else (including returned value). In that case error is not > > > > > > > > produced (I think this is a bug in compiler). In other case it is > computing > > > > > > > > some value calling memcpy or rte_ memcpy and you should at > least > > > > > > > > explicitly throw it away by casting to void. I like solution with static > > > > > > > > > > > > > > Actually, I try to pass "n" as a Int value like 4, it still report this > > > > > > > error :) > > > > > > > > > > > > My workaround was: > > > > > > (void) rte_memcpy(...); > > > > > > > > > > > > But this is only a workaround. > > > > > > > > > > It's not so bad. > > > > > > > > > > > > > inline but someone else should spoke about possible side effects. > > > > > > > > > > > > > > Yes, but as I know inline is better than macros. > > > > > > > > > > From the GCC manual: > > > > > " > > > > > You may use this built-in function in either a macro or an inline > function. > > > > > However, if you use it in an inlined function and pass an argument of > the > > > > > function as the argument to the built-in, GCC never returns 1 when you > call > > > > > the inline function with a string constant or compound literal and does > not > > > > > return 1 when you pass a constant numeric value to the inline function > unless > > > > > you specify the -O option. > > > > > " > > > > > > > > > > It seems the "inline fix" cannot be used. > > > > > > > > > > I'm going to send a patch with Pawel's workaround. > > > > > > > > And something like this? > > > > > > > > #define rte_memcpy(dst, src, n) \ > > > > - ((__builtin_constant_p(n)) ? \ > > > > + ({ (__builtin_constant_p(n)) ? \ > > > > memcpy((dst), (src), (n)) : \ > > > > - rte_memcpy_func((dst), (src), (n))) > > > > + rte_memcpy_func((dst), (src), (n)); }) > > > > > > What happens to the returned value after this change? > > > ptr = rte_memcpy(dst, src, n) + offset: > > > > > https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement-Exprs > > > > Whole expression should be 'void *' type (like *memcpy()) and it should > work > > as usual (see maxint() example in above link). It is GCC extension. > > OK nice. > I didn't test it on SUSE 11 SP3. I assume you did it? > Please Pawel, could you send a proper patch quickly? > If nobody disagree, it'll be merged in RC5 today. Hi Thomas, I sent this patch on behalf of Pawel. It is: [PATCH] fix rte_memcpy() macro: avoid unused value warning Michal > > > > > Thomas, can you check build with EXTRA_CFLAG='-Wunused-value'. > > > > > > You mean EXTRA_CFLAGS (with a S). > > > It fails in many locations. > > > What's your point? > > > > I am just asking if this is an typo, error or intend to do statements with no > effects like bellow. > > > > ixgbe_common.c:4429:3: error: statement with no effect [-Werror=unused- > value] > > > > 4426: /* first pull in the header so we know the buffer length */ > > 4427: for (bi = 0; bi < dword_len; bi++) { > > 4428: buffer[bi] = IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG, > bi); > > 4429: IXGBE_LE32_TO_CPUS(&buffer[bi]); // <------ here > > 4430 } > > It's an intent. On big endian CPU, this has an effect. > > > > Do you to support -Wunused-value? > > > > No, I just turned this on to check above change and was surprised what > happened. > > Honestly, I don't know if there is a good fix for this warning. > > -- > Thomas ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-15 10:54 ` Thomas Monjalon 2014-12-15 11:07 ` [dpdk-dev] [PATCH] enic: fix build on SUSE 11 Thomas Monjalon 2014-12-15 11:27 ` [dpdk-dev] error: value computed is not used Wodkowski, PawelX @ 2014-12-16 0:49 ` Qiu, Michael 2 siblings, 0 replies; 18+ messages in thread From: Qiu, Michael @ 2014-12-16 0:49 UTC (permalink / raw) To: Thomas Monjalon, Wodkowski, PawelX; +Cc: dev On 12/15/2014 6:55 PM, Thomas Monjalon wrote: > 2014-12-08 15:26, Wodkowski, PawelX: >> From: Qiu, Michael >>> On 2014/12/8 19:00, Wodkowski, PawelX wrote: >>>>> lib/librte_pmd_enic/enic_main.c: In function 'enic_set_rsskey': >>>>> lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used >>>>> >>>>> I dig out that, it was ome issue of the macros rte_memcpy() >>>>> #define rte_memcpy(dst, src, n) \ >>>>> ((__builtin_constant_p(n)) ? \ >>>>> memcpy((dst), (src), (n)) : \ >>>>> rte_memcpy_func((dst), (src), (n))) >>>>> >>>>> When I use only (n) instead of (__builtin_constant_p(n), it will pass( I >>>>> know that it was incorrect, just a experiment). >>>>> >>>>> But I try to use inline function instead of macros: >>>>> static inline void * rte_memcpy(void *dst, const void *src, size_t n) >>>>> { >>>>> return __builtin_constant_p(n) ? memcpy(dst, src, n) : >>>>> rte_memcpy_func(dst, src, n); >>>>> } >>>>> >>>>> It will pass:), and works, this could be one potential workaround fix. >>>>> >>>>> Who knows why? The root cause is what? >>>>> >>>>> I've no idea about this. >>>>> >>>> I got the same issue while ago. I don't remember exactly everything >>>> but my conclusion was that there was some bug in compiler. I think, >>>> when 'n' I constant and/or small compiler is inlining memcpy and throwing >>>> everything else (including returned value). In that case error is not >>>> produced (I think this is a bug in compiler). In other case it is computing >>>> some value calling memcpy or rte_ memcpy and you should at least >>>> explicitly throw it away by casting to void. I like solution with static >>> Actually, I try to pass "n" as a Int value like 4, it still report this >>> error :) >> My workaround was: >> (void) rte_memcpy(...); >> >> But this is only a workaround. > It's not so bad. > >>>> inline but someone else should spoke about possible side effects. >>> Yes, but as I know inline is better than macros. > From the GCC manual: > " > You may use this built-in function in either a macro or an inline function. > However, if you use it in an inlined function and pass an argument of the > function as the argument to the built-in, GCC never returns 1 when you call > the inline function with a string constant or compound literal and does not > return 1 when you pass a constant numeric value to the inline function unless > you specify the -O option. > " > > It seems the "inline fix" cannot be used. Actually, it can be used and work, as -O option is always specified(I've test before). But it should be a issue and not safe. Thanks, Michael > I'm going to send a patch with Pawel's workaround. > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-08 9:05 [dpdk-dev] error: value computed is not used Qiu, Michael 2014-12-08 11:00 ` Wodkowski, PawelX @ 2014-12-09 9:19 ` Qiu, Michael 2014-12-10 9:26 ` Qiu, Michael 2 siblings, 0 replies; 18+ messages in thread From: Qiu, Michael @ 2014-12-09 9:19 UTC (permalink / raw) To: dev Any other comments on this issue? Thanks, Michael On 12/8/2014 5:07 PM, Qiu, Michael wrote: > Hi all, > My platform is: > > uname -a > Linux suse-11-sp3 3.0.77-0.11-xen #1 SMP Tue Mar 11 16:48:56 CST 2014 > x86_64 x86_64 x86_64 GNU/Linux > > gcc -v > Using built-in specs. > COLLECT_GCC=gcc > COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/4.5/lto-wrapper > Target: x86_64-suse-linux > Configured with: ../configure --prefix=/usr --infodir=/usr/share/info > --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 > --enable-languages=c,c++,objc,fortran,obj-c++,java,ada > --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.5 > --enable-ssp --disable-libssp --disable-plugin > --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' > --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 > --with-system-zlib --enable-__cxa_atexit > --enable-libstdcxx-allocator=new --disable-libstdcxx-pch > --enable-version-specific-runtime-libs --program-suffix=-4.5 > --enable-linux-futex --without-system-libunwind --enable-gold > --with-plugin-ld=/usr/bin/gold --with-arch-32=i586 --with-tune=generic > --build=x86_64-suse-linux > Thread model: posix > gcc version 4.5.1 20101208 [gcc-4_5-branch revision 167585] (SUSE Linux) > > When I try to compile the source code to x86_64 linuxapp, I got this > error message: > > lib/librte_pmd_enic/enic_main.c: In function ‘enic_set_rsskey’: > lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used > > I dig out that, it was ome issue of the macros rte_memcpy() > #define rte_memcpy(dst, src, n) \ > ((__builtin_constant_p(n)) ? \ > memcpy((dst), (src), (n)) : \ > rte_memcpy_func((dst), (src), (n))) > > When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > know that it was incorrect, just a experiment). > > But I try to use inline function instead of macros: > static inline void * rte_memcpy(void *dst, const void *src, size_t n) > { > return __builtin_constant_p(n) ? memcpy(dst, src, n) : > rte_memcpy_func(dst, src, n); > } > > It will pass:), and works, this could be one potential workaround fix. > > Who knows why? The root cause is what? > > I've no idea about this. > > Thanks, > Michael > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [dpdk-dev] error: value computed is not used 2014-12-08 9:05 [dpdk-dev] error: value computed is not used Qiu, Michael 2014-12-08 11:00 ` Wodkowski, PawelX 2014-12-09 9:19 ` Qiu, Michael @ 2014-12-10 9:26 ` Qiu, Michael 2 siblings, 0 replies; 18+ messages in thread From: Qiu, Michael @ 2014-12-10 9:26 UTC (permalink / raw) To: dev Hi all, Any idea? Leave this issue in DPDK? Thanks, Michael On 12/8/2014 5:07 PM, Qiu, Michael wrote: > Hi all, > My platform is: > > uname -a > Linux suse-11-sp3 3.0.77-0.11-xen #1 SMP Tue Mar 11 16:48:56 CST 2014 > x86_64 x86_64 x86_64 GNU/Linux > > gcc -v > Using built-in specs. > COLLECT_GCC=gcc > COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/4.5/lto-wrapper > Target: x86_64-suse-linux > Configured with: ../configure --prefix=/usr --infodir=/usr/share/info > --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 > --enable-languages=c,c++,objc,fortran,obj-c++,java,ada > --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.5 > --enable-ssp --disable-libssp --disable-plugin > --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' > --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 > --with-system-zlib --enable-__cxa_atexit > --enable-libstdcxx-allocator=new --disable-libstdcxx-pch > --enable-version-specific-runtime-libs --program-suffix=-4.5 > --enable-linux-futex --without-system-libunwind --enable-gold > --with-plugin-ld=/usr/bin/gold --with-arch-32=i586 --with-tune=generic > --build=x86_64-suse-linux > Thread model: posix > gcc version 4.5.1 20101208 [gcc-4_5-branch revision 167585] (SUSE Linux) > > When I try to compile the source code to x86_64 linuxapp, I got this > error message: > > lib/librte_pmd_enic/enic_main.c: In function ‘enic_set_rsskey’: > lib/librte_pmd_enic/enic_main.c:862:2: error: value computed is not used > > I dig out that, it was ome issue of the macros rte_memcpy() > #define rte_memcpy(dst, src, n) \ > ((__builtin_constant_p(n)) ? \ > memcpy((dst), (src), (n)) : \ > rte_memcpy_func((dst), (src), (n))) > > When I use only (n) instead of (__builtin_constant_p(n), it will pass( I > know that it was incorrect, just a experiment). > > But I try to use inline function instead of macros: > static inline void * rte_memcpy(void *dst, const void *src, size_t n) > { > return __builtin_constant_p(n) ? memcpy(dst, src, n) : > rte_memcpy_func(dst, src, n); > } > > It will pass:), and works, this could be one potential workaround fix. > > Who knows why? The root cause is what? > > I've no idea about this. > > Thanks, > Michael > ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2014-12-16 0:50 UTC | newest] Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-12-08 9:05 [dpdk-dev] error: value computed is not used Qiu, Michael 2014-12-08 11:00 ` Wodkowski, PawelX 2014-12-08 15:23 ` Qiu, Michael 2014-12-08 15:26 ` Wodkowski, PawelX 2014-12-15 10:54 ` Thomas Monjalon 2014-12-15 11:07 ` [dpdk-dev] [PATCH] enic: fix build on SUSE 11 Thomas Monjalon 2014-12-15 11:27 ` [dpdk-dev] error: value computed is not used Wodkowski, PawelX 2014-12-15 13:26 ` Thomas Monjalon 2014-12-15 13:47 ` Wodkowski, PawelX 2014-12-15 14:16 ` Thomas Monjalon 2014-12-15 15:44 ` Wodkowski, PawelX 2014-12-15 16:35 ` Ananyev, Konstantin 2014-12-15 16:00 ` Ananyev, Konstantin 2014-12-15 16:40 ` Thomas Monjalon 2014-12-15 17:03 ` Jastrzebski, MichalX K 2014-12-16 0:49 ` Qiu, Michael 2014-12-09 9:19 ` Qiu, Michael 2014-12-10 9:26 ` Qiu, Michael
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).