aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-11-11 12:53:36 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-11-11 12:53:36 +0000
commitd07f8c591acf1ed2f99873464093b8729a8da0f2 (patch)
tree0252505042f9bed107f88180981e1af3b6ada3e7
parent495d8b0f033533909bc9bcc4aa246864ccb9136b (diff)
downloadgcc-d07f8c591acf1ed2f99873464093b8729a8da0f2.zip
gcc-d07f8c591acf1ed2f99873464093b8729a8da0f2.tar.gz
gcc-d07f8c591acf1ed2f99873464093b8729a8da0f2.tar.bz2
re PR middle-end/78295 (Spurious -Wuninitialized warning for vector element assignment)
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/uninit-pr78295.c13
-rw-r--r--gcc/tree-ssa-uninit.c8
4 files changed, 32 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5cbc53d..5ca356d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e16fdde..acec6d9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..ae0b214
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/uninit-pr78295.c
@@ -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;
+}
diff --git a/gcc/tree-ssa-uninit.c b/gcc/tree-ssa-uninit.c
index 1344854..dfee0ea 100644
--- a/gcc/tree-ssa-uninit.c
+++ b/gcc/tree-ssa-uninit.c
@@ -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),