This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR81782
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 8 Dec 2017 15:44:03 +0100 (CET)
- Subject: [PATCH] Fix PR81782
- Authentication-results: sourceware.org; auth=none
The following fixes spurious uninit warnings for zero-sized arrays.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard.
2017-12-08 Richard Biener <rguenther@suse.de>
PR middle-end/81782
* tree-ssa-uninit.c (warn_uninitialized_vars): Properly
handle accesses outside of zero-sized vars.
* gcc.dg/uninit-pr81782.c: New testcase.
Index: gcc/tree-ssa-uninit.c
===================================================================
--- gcc/tree-ssa-uninit.c (revision 255499)
+++ gcc/tree-ssa-uninit.c (working copy)
@@ -296,8 +296,8 @@ warn_uninitialized_vars (bool warn_possi
variable. */
if (DECL_P (base)
&& ref.size != -1
- && ref.max_size == ref.size
- && (ref.offset + ref.size <= 0
+ && ((ref.max_size == ref.size
+ && ref.offset + ref.size <= 0)
|| (ref.offset >= 0
&& DECL_SIZE (base)
&& TREE_CODE (DECL_SIZE (base)) == INTEGER_CST
Index: gcc/testsuite/gcc.dg/uninit-pr81782.c
===================================================================
--- gcc/testsuite/gcc.dg/uninit-pr81782.c (nonexistent)
+++ gcc/testsuite/gcc.dg/uninit-pr81782.c (working copy)
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-Wmaybe-uninitialized" } */
+
+int
+foo (void)
+{
+ char empty_array[] = { };
+ int i, ret = 0;
+
+ for (i = 0; i < (int) (sizeof (empty_array) / sizeof (empty_array[0])); i++)
+ ret = empty_array[i]; /* { dg-bogus "uninitialized" } */
+
+ return ret;
+}