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? 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