On Tue, Apr 28, 2020 at 10:03 AM Stefan Schulze Frielinghaus via
Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
>
> In function handle_vector_size_attribute local variable nunits is
> supposed to be initialized by function type_valid_for_vector_size.
> However, in case ARGS is null the function may return with a non-null
> value and leave nunits uninitialized.  This results in warning/error:
>
> gcc/poly-int.h: In function 'tree_node* 
> handle_vector_size_attribute(tree_node**, tree, tree, int, bool*)':
> gcc/poly-int.h:330:3: error: 'nunits' may be used uninitialized in this 
> function [-Werror=maybe-uninitialized]
>   330 |   ((void) (&(RES).coeffs[0] == (C *) 0), \
>       |   ^
> gcc/c-family/c-attribs.c:3695:26: note: 'nunits' was declared here
>  3695 |   unsigned HOST_WIDE_INT nunits;
>       |
>
> This is fixed by also checking whether ARGS is null or not.
>
> Bootstrapped and regtested on S/390. Ok for master?

I think it's better to assert that it is not null for example by adding a
nonnull attribute?  Can you check if that works?  If it doesn't the
patch is OK.

Thanks,
Richard.

> gcc/c-family/ChangeLog:
>
> 2020-04-28  Stefan Schulze Frielinghaus  <stefa...@linux.ibm.com>
>
>         * c-attribs.c (handle_vector_size_attribute): Fix use of
>         unintialized variable nunits.
> ---
>  gcc/c-family/c-attribs.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c
> index ac936d5bbbb..a8992e76755 100644
> --- a/gcc/c-family/c-attribs.c
> +++ b/gcc/c-family/c-attribs.c
> @@ -3694,7 +3694,7 @@ handle_vector_size_attribute (tree *node, tree name, 
> tree args,
>       the number of vector units.  */
>    unsigned HOST_WIDE_INT nunits;
>    type = type_valid_for_vector_size (type, name, args, &nunits);
> -  if (!type)
> +  if (!type || !args)
>      return NULL_TREE;
>
>    tree new_type = build_vector_type (type, nunits);
> --
> 2.25.3
>

Reply via email to