On Mon, May 4, 2020 at 1:44 PM Stefan Schulze Frielinghaus
<stefa...@linux.ibm.com> wrote:
>
> On Tue, Apr 28, 2020 at 08:27:12PM +0200, Stefan Schulze Frielinghaus wrote:
> > On Tue, Apr 28, 2020 at 11:33:31AM +0200, Richard Biener wrote:
> > > 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.
> >
> > Yes, that works, too.  Please find an updated version attached.  If you
> > think it is useful I could also add a gcc_assert (!args) for minimal
> > testing.
>
> I guess initializing nunits to zero does not really solve the problem
> and while failing to identify all call sides (which isn't future-proof
> anyway), I went with adding a checking assert statement.  Bootstrapped
> and regtested on S/390.  Ok for master?

You now have both, the atttribute and the assert.  The assert alone is OK.

Thanks,
Richard.

Reply via email to