aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2018-01-10 21:39:20 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2018-01-10 21:39:20 +0000
commite7c6abad7f0bcbf0e60d27bc8cff1087c5195f76 (patch)
tree4b719a808b76f3cf629aba03fa7b178fe0ecf8ba /gcc
parent266404a8d62b99ab6dd6579bbd33fca32e91ca3b (diff)
downloadgcc-e7c6abad7f0bcbf0e60d27bc8cff1087c5195f76.zip
gcc-e7c6abad7f0bcbf0e60d27bc8cff1087c5195f76.tar.gz
gcc-e7c6abad7f0bcbf0e60d27bc8cff1087c5195f76.tar.bz2
re PR middle-end/81897 (spurious -Wmaybe-uninitialized warning)
PR middle-end/81897 * tree-ssa-uninit.c (convert_control_dep_chain_into_preds): Skip empty blocks. From-SVN: r256456
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/uninit-pr81897-2.c35
-rw-r--r--gcc/tree-ssa-uninit.c9
3 files changed, 49 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 413f24c..ba1a844 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-10 Aldy Hernandez <aldyh@redhat.com>
+
+ PR middle-end/81897
+ * tree-ssa-uninit.c (convert_control_dep_chain_into_preds): Skip
+ empty blocks.
+
2018-01-10 Eric Botcazou <ebotcazou@adacore.com>
* dwarf2out.c (dwarf2out_var_location): Do not pass NULL to fprintf.
diff --git a/gcc/testsuite/gcc.dg/uninit-pr81897-2.c b/gcc/testsuite/gcc.dg/uninit-pr81897-2.c
new file mode 100644
index 0000000..3960af4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/uninit-pr81897-2.c
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fno-tree-ccp -Wmaybe-uninitialized" } */
+
+int oo;
+
+void
+pc (int *tt)
+{
+ int cf = 0;
+
+ if (*tt != 0)
+ {
+ if (0)
+ {
+ int *qg;
+ int uj = 0;
+
+ t6:
+ tt = &cf;
+ if (oo != 0)
+ {
+ ++uj; /* { dg-warning "may be used uninit" } */
+ *qg = !!oo && !!uj; /* { dg-warning "may be used uninit" } */
+ }
+ }
+ cf = 0;
+ goto t6;
+ }
+
+ if (oo != 0)
+ {
+ *tt = 1;
+ goto t6;
+ }
+}
diff --git a/gcc/tree-ssa-uninit.c b/gcc/tree-ssa-uninit.c
index 3823947..8ccbc85 100644
--- a/gcc/tree-ssa-uninit.c
+++ b/gcc/tree-ssa-uninit.c
@@ -669,9 +669,16 @@ convert_control_dep_chain_into_preds (vec<edge> *dep_chains,
e = one_cd_chain[j];
guard_bb = e->src;
gsi = gsi_last_bb (guard_bb);
- /* Ignore empty BBs as they're basically forwarder blocks. */
+ /* Ignore empty forwarder blocks. */
if (empty_block_p (guard_bb) && single_succ_p (guard_bb))
continue;
+ /* An empty basic block here is likely a PHI, and is not one
+ of the cases we handle below. */
+ if (gsi_end_p (gsi))
+ {
+ has_valid_pred = false;
+ break;
+ }
cond_stmt = gsi_stmt (gsi);
if (is_gimple_call (cond_stmt) && EDGE_COUNT (e->src->succs) >= 2)
/* Ignore EH edge. Can add assertion on the other edge's flag. */