Hi Honnappa,

Sorry about the delayed reply.
The build error trace is below, the build command used was: CC=gcc meson 
--optimization=1 --werror build1; ninja -C build1
I am not sure how I could fix this issue without initialising zcd.

[2339/2407] Compiling C object 
app/test/dpdk-test.p/test_ring_mt_peek_stress_zc.c.o
FAILED: app/test/dpdk-test.p/test_ring_mt_peek_stress_zc.c.o
gcc -Iapp/test/dpdk-test.p -Iapp/test -I../app/test -Ilib/librte_acl 
-I../lib/librte_acl -I. -I.. -Iconfig -I../config -Ilib/librte_eal/include 
-I../lib/librte_eal/include -Ilib/librte_eal/linux/include 
-I../lib/librte_eal/linux/include -Ilib/librte_eal/x86/include 
-I../lib/librte_eal/x86/include -Ilib/librte_eal/common 
-I../lib/librte_eal/common -Ilib/librte_eal -I../lib/librte_eal 
-Ilib/librte_kvargs -I../lib/librte_kvargs -Ilib/librte_metrics 
-I../lib/librte_metrics -Ilib/librte_telemetry -I../lib/librte_telemetry 
-Idrivers/bus/pci -I../drivers/bus/pci -I../drivers/bus/pci/linux 
-Ilib/librte_pci -I../lib/librte_pci -Idrivers/bus/vdev -I../drivers/bus/vdev 
-Ilib/librte_bitratestats -I../lib/librte_bitratestats -Ilib/librte_ethdev 
-I../lib/librte_ethdev -Ilib/librte_net -I../lib/librte_net -Ilib/librte_mbuf 
-I../lib/librte_mbuf -Ilib/librte_mempool -I../lib/librte_mempool 
-Ilib/librte_ring -I../lib/librte_ring -Ilib/librte_meter -I../lib/librte_meter 
-Ilib/librte_bpf -I../lib/librte_bpf -Ilib/librte_cfgfile 
-I../lib/librte_cfgfile -Ilib/librte_cmdline -I../lib/librte_cmdline 
-Ilib/librte_cryptodev -I../lib/librte_cryptodev -Ilib/librte_distributor 
-I../lib/librte_distributor -Ilib/librte_efd -I../lib/librte_efd 
-Ilib/librte_hash -I../lib/librte_hash -Ilib/librte_rcu -I../lib/librte_rcu 
-Ilib/librte_eventdev -I../lib/librte_eventdev -Ilib/librte_timer 
-I../lib/librte_timer -Ilib/librte_fib -I../lib/librte_fib -Ilib/librte_rib 
-I../lib/librte_rib -Ilib/librte_flow_classify -I../lib/librte_flow_classify 
-Ilib/librte_table -I../lib/librte_table -Ilib/librte_port -I../lib/librte_port 
-Ilib/librte_sched -I../lib/librte_sched -Ilib/librte_ip_frag 
-I../lib/librte_ip_frag -Ilib/librte_kni -I../lib/librte_kni -Ilib/librte_lpm 
-I../lib/librte_lpm -Ilib/librte_graph -I../lib/librte_graph -Ilib/librte_ipsec 
-I../lib/librte_ipsec -Ilib/librte_security -I../lib/librte_security 
-Ilib/librte_latencystats -I../lib/librte_latencystats -Ilib/librte_member 
-I../lib/librte_member -Ilib/librte_node -I../lib/librte_node 
-Ilib/librte_pipeline -I../lib/librte_pipeline -Ilib/librte_rawdev 
-I../lib/librte_rawdev -Ilib/librte_reorder -I../lib/librte_reorder 
-Ilib/librte_stack -I../lib/librte_stack -Idrivers/mempool/ring 
-I../drivers/mempool/ring -Idrivers/mempool/stack -I../drivers/mempool/stack 
-Idrivers/event/skeleton -I../drivers/event/skeleton -Idrivers/net/bonding 
-I../drivers/net/bonding -Idrivers/net/ring -I../drivers/net/ring 
-Ilib/librte_power -I../lib/librte_power -Ilib/librte_pdump 
-I../lib/librte_pdump -Idrivers/crypto/scheduler -I../drivers/crypto/scheduler 
-fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch 
-Werror -O1 -include rte_config.h -Wextra -Wcast-qual -Wdeprecated 
-Wformat-nonliteral -Wformat-security -Wmissing-declarations 
-Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wpointer-arith 
-Wsign-compare -Wstrict-prototypes -Wundef -Wwrite-strings 
-Wno-packed-not-aligned -Wno-missing-field-initializers -march=native 
-mno-avx512f -DALLOW_EXPERIMENTAL_API -Wno-format-truncation -D_GNU_SOURCE 
-fno-strict-aliasing -DALLOW_INTERNAL_API -MD -MQ 
app/test/dpdk-test.p/test_ring_mt_peek_stress_zc.c.o -MF 
app/test/dpdk-test.p/test_ring_mt_peek_stress_zc.c.o.d -o 
app/test/dpdk-test.p/test_ring_mt_peek_stress_zc.c.o -c 
../app/test/test_ring_mt_peek_stress_zc.c
In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5:
../app/test/test_ring_stress_impl.h: In function 'test_worker':
../app/test/test_ring.h:82:3: error: 'zcd.n1' may be used uninitialized in this 
function [-Werror=maybe-uninitialized]
   test_ring_mem_copy(zcd->ptr2, src,
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      esize, num - zcd->n1);
      ~~~~~~~~~~~~~~~~~~~~~
../app/test/test_ring_mt_peek_stress_zc.c:32:26: note: 'zcd.n1' was declared 
here
  struct rte_ring_zc_data zcd;
                          ^~~
In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5:
../app/test/test_ring.h:67:2: error: '*((void *)&zcd+8)' may be used 
uninitialized in this function [-Werror=maybe-uninitialized]
  memcpy(dst, src, sz);
  ^~~~~~~~~~~~~~~~~~~~
../app/test/test_ring_mt_peek_stress_zc.c:32:26: note: '*((void *)&zcd+8)' was 
declared here
  struct rte_ring_zc_data zcd;
                          ^~~
In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5:
../app/test/test_ring.h:67:2: error: 'zcd' may be used uninitialized in this 
function [-Werror=maybe-uninitialized]
  memcpy(dst, src, sz);
  ^~~~~~~~~~~~~~~~~~~~
../app/test/test_ring_mt_peek_stress_zc.c:32:26: note: 'zcd' was declared here
  struct rte_ring_zc_data zcd;
                          ^~~
In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5:
../app/test/test_ring.h:63:11: error: 'zcd.n1' may be used uninitialized in 
this function [-Werror=maybe-uninitialized]
  sz = num * sizeof(void *);
       ~~~~^~~~~~~~~~~~~~~~
../app/test/test_ring_mt_peek_stress_zc.c:14:26: note: 'zcd.n1' was declared 
here
  struct rte_ring_zc_data zcd;
                          ^~~
In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5:
../app/test/test_ring.h:67:2: error: '*((void *)&zcd+8)' may be used 
uninitialized in this function [-Werror=maybe-uninitialized]
  memcpy(dst, src, sz);
  ^~~~~~~~~~~~~~~~~~~~
../app/test/test_ring_mt_peek_stress_zc.c:14:26: note: '*((void *)&zcd+8)' was 
declared here
  struct rte_ring_zc_data zcd;
                          ^~~
In file included from ../app/test/test_ring_mt_peek_stress_zc.c:5:
../app/test/test_ring.h:67:2: error: 'zcd' may be used uninitialized in this 
function [-Werror=maybe-uninitialized]
  memcpy(dst, src, sz);
  ^~~~~~~~~~~~~~~~~~~~
../app/test/test_ring_mt_peek_stress_zc.c:14:26: note: 'zcd' was declared here
  struct rte_ring_zc_data zcd;
                          ^~~
cc1: all warnings being treated as errors
[2340/2407] Compiling C object 
drivers/libtmp_...ontx2.a.p/event_octeontx2_otx2_worker_dual.c.o
ninja: build stopped: subcommand failed.

Thanks,
Conor.

> From: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>
> Sent: Wednesday 4 November 2020 18:48
> To: Walsh, Conor <conor.wa...@intel.com>; Ananyev, Konstantin
> <konstantin.anan...@intel.com>
> Cc: dev@dpdk.org; Chen, LingliX <linglix.c...@intel.com>; nd
> <n...@arm.com>; Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>;
> nd <n...@arm.com>
> Subject: RE: [PATCH v1] app/test: zcd needs to be initialised to fix gcc 
> compile
> error
> 
> Hi Conor,
>       Thanks for the patch.
> 
> <snip>
> 
> >
> > When DPDK is compiled with gcc < 9 with the optimization level set to 1 gcc
> > sees zcd in test_ring.h as possibly being uninitialised. To correct this 
> > error
> zcd
> > has been initialised to {0} in test_ring_mt_peek_stress_zc.c.
> >
> > Signed-off-by: Conor Walsh <conor.wa...@intel.com>
> > ---
> >  app/test/test_ring_mt_peek_stress_zc.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/app/test/test_ring_mt_peek_stress_zc.c
> > b/app/test/test_ring_mt_peek_stress_zc.c
> > index 7e0bd511a7..ba0acf237c 100644
> > --- a/app/test/test_ring_mt_peek_stress_zc.c
> > +++ b/app/test/test_ring_mt_peek_stress_zc.c
> > @@ -11,7 +11,7 @@ _st_ring_dequeue_bulk(struct rte_ring *r, void **obj,
> > uint32_t n,
> >     uint32_t *avail)
> >  {
> >     uint32_t m;
> > -   struct rte_ring_zc_data zcd;
> > +   struct rte_ring_zc_data zcd = {0};
> I faced similar problems when I created this test case. I refrained from doing
> this initialization as it might mask the problems in the library. Is it 
> possible to
> identify which path in the library is actually resulting in this error? I 
> would
> prefer to fix that instead.
> 
> >
> >     m = rte_ring_dequeue_zc_bulk_start(r, n, &zcd, avail);
> >     n = (m == n) ? n : 0;
> > @@ -29,7 +29,7 @@ _st_ring_enqueue_bulk(struct rte_ring *r, void *
> const
> > *obj, uint32_t n,
> >     uint32_t *free)
> >  {
> >     uint32_t m;
> > -   struct rte_ring_zc_data zcd;
> > +   struct rte_ring_zc_data zcd = {0};
> >
> >     m = rte_ring_enqueue_zc_bulk_start(r, n, &zcd, free);
> >     n = (m == n) ? n : 0;
> > --
> > 2.25.1

Reply via email to