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 >