PR tree-optimization/61869 - Spurious uninitialized warning
authorMartin Sebor <msebor@redhat.com>
Mon, 29 Mar 2021 21:58:01 +0000 (15:58 -0600)
committerMartin Sebor <msebor@redhat.com>
Mon, 29 Mar 2021 21:58:01 +0000 (15:58 -0600)
gcc/testsuite/ChangeLog:
PR tree-optimization/61869
* gcc.dg/uninit-pr61869.c: New test.

gcc/testsuite/gcc.dg/uninit-pr61869.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.dg/uninit-pr61869.c b/gcc/testsuite/gcc.dg/uninit-pr61869.c
new file mode 100644 (file)
index 0000000..ef4f436
--- /dev/null
@@ -0,0 +1,47 @@
+/* PR tree-optimization/61869 - Spurious uninitialized warning (lim1 pass,
+   pretty-printed internal var
+   { dg-do compile }
+   { dg-options "-O2 -Wall" } */
+
+typedef struct data {
+  struct data *next;
+} data;
+
+typedef struct list {
+  unsigned dummy;
+  struct list *next;
+  data *start;
+  int flags;
+} list;
+
+typedef struct iterator {
+  struct data *ptr;
+  unsigned dummy;
+} iterator;
+
+iterator start (list *a) {
+  iterator i = {
+    *(a->flags ? &a->start : 0),
+    0
+  };
+  return i;
+}
+
+void g (iterator *i);
+
+void f (list *b)
+{
+  list *a;
+  iterator i;       // { dg-bogus "-Wmaybe-uninitialized" }
+
+  for (a = b; a; a = a->next)
+  for (i = start (a); i.ptr; i.ptr = i.ptr->next)
+   {
+     if (i.ptr)
+       return;
+   }
+
+  for (a = b; a; a = a->next)
+  for (i = start (a); i.ptr; i.ptr = i.ptr->next)
+    g(&i);
+}