diff options
author | Richard Biener <rguenther@suse.de> | 2016-11-11 12:53:36 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-11-11 12:53:36 +0000 |
commit | d07f8c591acf1ed2f99873464093b8729a8da0f2 (patch) | |
tree | 0252505042f9bed107f88180981e1af3b6ada3e7 | |
parent | 495d8b0f033533909bc9bcc4aa246864ccb9136b (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-pr78295.c | 13 | ||||
-rw-r--r-- | gcc/tree-ssa-uninit.c | 8 |
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), |