c-attribs.c: Fix warning about use of uninitialized variable nunits
authorStefan Schulze Frielinghaus <stefansf@linux.ibm.com>
Sun, 26 Apr 2020 07:42:29 +0000 (09:42 +0200)
committerStefan Schulze Frielinghaus <stefansf@linux.ibm.com>
Tue, 5 May 2020 15:33:54 +0000 (17:33 +0200)
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;
      |

Added attribute nonnull for argument args in order to silence warning
and added an assert statement in order to check the invariant candidate.

gcc/c-family/ChangeLog:

2020-05-05  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>

* c-attribs.c (handle_vector_size_attribute): Add attribute
nonnull for argument args in order to silence warning of
uninitialized variable usage.  Since this is local to the
compilation unit and thus cannot be checked at call sides by the
compiler, added an assert statement in order to verify this.

gcc/c-family/ChangeLog
gcc/c-family/c-attribs.c

index 69ea1fdc4f35e4f262342aa1ad875c29dc146b30..fe6cfe721165f563686cb3b245b8667ae9a368c6 100644 (file)
@@ -1,3 +1,11 @@
+2020-05-05  Stefan Schulze Frielinghaus  <stefansf@linux.ibm.com>
+
+       * c-attribs.c (handle_vector_size_attribute): Add attribute
+       nonnull for argument args in order to silence warning of
+       uninitialized variable usage.  Since this is local to the
+       compilation unit and thus cannot be checked at call sides by the
+       compiler, added an assert statement in order to verify this.
+
 2020-05-01  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/93492
index a101312c5817cb918d64961372580801cd84622c..7a6fb9af6dae5c9be97007b07bc2ad55773a09eb 100644 (file)
@@ -117,7 +117,7 @@ static tree handle_tm_attribute (tree *, tree, tree, int, bool *);
 static tree handle_tm_wrap_attribute (tree *, tree, tree, int, bool *);
 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
 static tree handle_vector_size_attribute (tree *, tree, tree, int,
-                                         bool *);
+                                         bool *) ATTRIBUTE_NONNULL(3);
 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
 static tree handle_nonstring_attribute (tree *, tree, tree, int, bool *);
 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
@@ -3697,6 +3697,8 @@ handle_vector_size_attribute (tree *node, tree name, tree args,
   if (!type)
     return NULL_TREE;
 
+  gcc_checking_assert (args != NULL);
+
   tree new_type = build_vector_type (type, nunits);
 
   /* Build back pointers if needed.  */