[dpdk-dev,v2] service: fix build error "ids uninitialized in rte_service_map_lcore_set"

Message ID 1505958643-21203-1-git-send-email-yi.y.yang@intel.com (mailing list archive)
State Accepted, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Yi Yang Sept. 21, 2017, 1:50 a.m. UTC
  v1->v2
  - Change title to more descriptive one
  - Add issue reproduce information to git log body

On current master tree, normal DPDK make will result in
the below error:

    error: ‘ids[0]’ may be used uninitialized in this
    function [-Werror=maybe-uninitialized]
    ret = rte_service_map_lcore_set(i, ids[lcore_iter], 1);

It can be reproduced very easily on Fedora 21 with
gcc-4.9.2-6.fc21.x86_64.

It is fixed after applied this patch.

Signed-off-by: Yi Yang <yi.y.yang@intel.com>
---
 lib/librte_eal/common/rte_service.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Van Haaren, Harry Sept. 21, 2017, 11:55 a.m. UTC | #1
> From: Yang, Yi Y

> Sent: Thursday, September 21, 2017 2:51 AM

> To: dev@dpdk.org

> Cc: Van Haaren, Harry <harry.van.haaren@intel.com>; Yang, Yi Y

> <yi.y.yang@intel.com>

> Subject: [PATCH v2] service: fix build error "ids uninitialized in

> rte_service_map_lcore_set"

> 

> v1->v2

>   - Change title to more descriptive one

>   - Add issue reproduce information to git log body

> 

> On current master tree, normal DPDK make will result in

> the below error:

> 

>     error: ‘ids[0]’ may be used uninitialized in this

>     function [-Werror=maybe-uninitialized]

>     ret = rte_service_map_lcore_set(i, ids[lcore_iter], 1);

> 

> It can be reproduced very easily on Fedora 21 with

> gcc-4.9.2-6.fc21.x86_64.

> 

> It is fixed after applied this patch.

> 

> Signed-off-by: Yi Yang <yi.y.yang@intel.com>



+CC Thomas, please pull this asap, as it causes build issues on various GCC/OS versions.

Acked-by: Harry van Haaren <harry.van.haaren@intel.com>



> ---

>  lib/librte_eal/common/rte_service.c | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/lib/librte_eal/common/rte_service.c

> b/lib/librte_eal/common/rte_service.c

> index 43716bb..e598e16 100644

> --- a/lib/librte_eal/common/rte_service.c

> +++ b/lib/librte_eal/common/rte_service.c

> @@ -431,7 +431,7 @@ rte_service_start_with_defaults(void)

>  	uint32_t count = rte_service_get_count();

> 

>  	int32_t lcore_iter = 0;

> -	uint32_t ids[RTE_MAX_LCORE];

> +	uint32_t ids[RTE_MAX_LCORE] = {0};

>  	int32_t lcore_count = rte_service_lcore_list(ids, RTE_MAX_LCORE);

> 

>  	if (lcore_count == 0)

> --

> 2.1.0
  
Thomas Monjalon Sept. 21, 2017, 12:41 p.m. UTC | #2
21/09/2017 13:55, Van Haaren, Harry:
> > From: Yang, Yi Y
> > Sent: Thursday, September 21, 2017 2:51 AM
> > To: dev@dpdk.org
> > Cc: Van Haaren, Harry <harry.van.haaren@intel.com>; Yang, Yi Y
> > <yi.y.yang@intel.com>
> > Subject: [PATCH v2] service: fix build error "ids uninitialized in
> > rte_service_map_lcore_set"
> > 
> > v1->v2
> >   - Change title to more descriptive one
> >   - Add issue reproduce information to git log body
> > 
> > On current master tree, normal DPDK make will result in
> > the below error:
> > 
> >     error: ‘ids[0]’ may be used uninitialized in this
> >     function [-Werror=maybe-uninitialized]
> >     ret = rte_service_map_lcore_set(i, ids[lcore_iter], 1);
> > 
> > It can be reproduced very easily on Fedora 21 with
> > gcc-4.9.2-6.fc21.x86_64.

Fixes: 21698354c832 ("service: introduce service cores concept")
Cc: stable@dpdk.org

> > It is fixed after applied this patch.
> > 
> > Signed-off-by: Yi Yang <yi.y.yang@intel.com>
> 
> +CC Thomas, please pull this asap, as it causes build issues on various GCC/OS versions.

Most of compilers do not raise an error.
It seems specific to gcc 4.9.
Nelio reported the same error with gcc 4.9.
Changing the title to "service: fix build with gcc 4.9"

> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c
index 43716bb..e598e16 100644
--- a/lib/librte_eal/common/rte_service.c
+++ b/lib/librte_eal/common/rte_service.c
@@ -431,7 +431,7 @@  rte_service_start_with_defaults(void)
 	uint32_t count = rte_service_get_count();
 
 	int32_t lcore_iter = 0;
-	uint32_t ids[RTE_MAX_LCORE];
+	uint32_t ids[RTE_MAX_LCORE] = {0};
 	int32_t lcore_count = rte_service_lcore_list(ids, RTE_MAX_LCORE);
 
 	if (lcore_count == 0)