]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/78295 (Spurious -Wuninitialized warning for vector element assignment)
authorRichard Biener <rguenther@suse.de>
Fri, 11 Nov 2016 12:53:36 +0000 (12:53 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 11 Nov 2016 12:53:36 +0000 (12:53 +0000)
2016-11-11  Richard Biener  <rguenther@suse.de>

PR middle-end/78295
* tree-ssa-uninit.c (warn_uninitialized_vars): Do not warn
about uninitialized destination arg of BIT_INSERT_EXPR.

* gcc.dg/uninit-pr78295.c: New testcase.

From-SVN: r242068

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/uninit-pr78295.c [new file with mode: 0644]
gcc/tree-ssa-uninit.c

index 5cbc53d45b73171d4ac7aeed182a0b3ba9ae6331..5ca356d7b1399ccc3dccfb5bb81cbba1906ff281 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-11  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/78295
+       * tree-ssa-uninit.c (warn_uninitialized_vars): Do not warn
+       about uninitialized destination arg of BIT_INSERT_EXPR.
+
 2016-11-10  Sandra Loosemore  <sandra@codesourcery.com>
 
        PR c/37998
index e16fdde8db969bc7f76897752e481edc41e8d08b..acec6d953438f28cb7fd1409f0370a5cb7f1dc5b 100644 (file)
@@ -1,3 +1,8 @@
+2016-11-11  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/78295
+       * gcc.dg/uninit-pr78295.c: New testcase.
+
 2016-11-10  Fritz O. Reese <fritzoreese@gmail.com>
 
        PR fortran/78277
diff --git a/gcc/testsuite/gcc.dg/uninit-pr78295.c b/gcc/testsuite/gcc.dg/uninit-pr78295.c
new file mode 100644 (file)
index 0000000..ae0b214
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall" } */
+
+typedef double vectype __attribute__ ((__vector_size__ (16)));
+
+vectype
+f (double x)
+{
+  vectype t;
+  for (int i = 0; i < 2; i++)
+    t[i] = x; /* { dg-bogus "uninitialized" } */
+  return t;
+}
index 13448548e0e00d5b61cdc1ebdcd75cb168a3f58b..dfee0ea72d1adca28e85d7213a9956171e3e95fa 100644 (file)
@@ -212,6 +212,14 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized)
             can warn about.  */
          FOR_EACH_SSA_USE_OPERAND (use_p, stmt, op_iter, SSA_OP_USE)
            {
+             /* BIT_INSERT_EXPR first operand should not be considered
+                a use for the purpose of uninit warnings.  */
+             if (gassign *ass = dyn_cast <gassign *> (stmt))
+               {
+                 if (gimple_assign_rhs_code (ass) == BIT_INSERT_EXPR
+                     && use_p->use == gimple_assign_rhs1_ptr (ass))
+                   continue;
+               }
              use = USE_FROM_PTR (use_p);
              if (always_executed)
                warn_uninit (OPT_Wuninitialized, use, SSA_NAME_VAR (use),