aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-03-08 14:10:47 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-03-08 14:10:47 +0000
commitedfcd7e3d471b9dde2d9a84490a850d2f850f381 (patch)
tree8052c1b41778ff9f1e2e9505b8521a982efc2e63 /gcc
parent6659fe59f3c39e991149fe60f17d0628d771a454 (diff)
downloadgcc-edfcd7e3d471b9dde2d9a84490a850d2f850f381.zip
gcc-edfcd7e3d471b9dde2d9a84490a850d2f850f381.tar.gz
gcc-edfcd7e3d471b9dde2d9a84490a850d2f850f381.tar.bz2
re PR tree-optimization/79955 (GLIBC build fails after r245840)
2017-03-08 Richard Biener <rguenther@suse.de> PR tree-optimization/79955 * tree-ssa-uninit.c (warn_uninitialized_vars): Do not warn for accesses that are completely outside of the variable. * gcc.dg/uninit-24.c: New testcase. From-SVN: r245976
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/uninit-24.c10
-rw-r--r--gcc/tree-ssa-uninit.c11
4 files changed, 32 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 56b2281..c59224e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-08 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/79955
+ * tree-ssa-uninit.c (warn_uninitialized_vars): Do not warn
+ for accesses that are completely outside of the variable.
+
2017-03-08 Andrew Haley <aph@redhat.com>
PR tree-optimization/79943
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5824caf..396ab3a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -9,6 +9,11 @@
2017-03-08 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/79955
+ * gcc.dg/uninit-24.c: New testcase.
+
+2017-03-08 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/79920
* gcc.dg/vect/pr79920.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/uninit-24.c b/gcc/testsuite/gcc.dg/uninit-24.c
new file mode 100644
index 0000000..30fe1e5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/uninit-24.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O -Wmaybe-uninitialized" } */
+
+int foo (int x)
+{
+ int y;
+ if (x)
+ return *(&y + 1); /* { dg-bogus "may be used uninitialized" } */
+ return 0;
+}
diff --git a/gcc/tree-ssa-uninit.c b/gcc/tree-ssa-uninit.c
index 1805c67..e019ecc 100644
--- a/gcc/tree-ssa-uninit.c
+++ b/gcc/tree-ssa-uninit.c
@@ -287,6 +287,17 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized)
|| TREE_NO_WARNING (base))
continue;
+ /* Do not warn if the access is fully outside of the
+ variable. */
+ if (ref.size != -1
+ && ref.max_size == ref.size
+ && (ref.offset + ref.size <= 0
+ || (ref.offset >= 0
+ && TREE_CODE (DECL_SIZE (base)) == INTEGER_CST
+ && compare_tree_int (DECL_SIZE (base),
+ ref.offset) <= 0)))
+ continue;
+
/* Limit the walking to a constant number of stmts after
we overcommit quadratic behavior for small functions
and O(n) behavior. */