diff options
author | Martin Sebor <msebor@redhat.com> | 2021-03-29 15:58:01 -0600 |
---|---|---|
committer | Martin Sebor <msebor@redhat.com> | 2021-03-29 15:58:01 -0600 |
commit | af739c8797d4cdf550366d0ef48136e0073df5c9 (patch) | |
tree | 441f8562cdb035acea8449774cf5e389fc3614e4 /gcc | |
parent | fecc835e216f537d3e7edb833cb3769489b983bb (diff) | |
download | gcc-af739c8797d4cdf550366d0ef48136e0073df5c9.zip gcc-af739c8797d4cdf550366d0ef48136e0073df5c9.tar.gz gcc-af739c8797d4cdf550366d0ef48136e0073df5c9.tar.bz2 |
PR tree-optimization/61869 - Spurious uninitialized warning
gcc/testsuite/ChangeLog:
PR tree-optimization/61869
* gcc.dg/uninit-pr61869.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-pr61869.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/uninit-pr61869.c b/gcc/testsuite/gcc.dg/uninit-pr61869.c new file mode 100644 index 0000000..ef4f436 --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-pr61869.c @@ -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); +} |