diff options
author | Richard Biener <rguenther@suse.de> | 2017-03-08 14:10:47 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-03-08 14:10:47 +0000 |
commit | edfcd7e3d471b9dde2d9a84490a850d2f850f381 (patch) | |
tree | 8052c1b41778ff9f1e2e9505b8521a982efc2e63 /gcc | |
parent | 6659fe59f3c39e991149fe60f17d0628d771a454 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-24.c | 10 | ||||
-rw-r--r-- | gcc/tree-ssa-uninit.c | 11 |
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. */ |