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

Reply via email to