aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2021-04-09 11:40:48 -0600
committerMartin Sebor <msebor@redhat.com>2021-04-09 11:40:48 -0600
commitb04093adb28bd6ee8b0390e840219fd2bba134db (patch)
treeedb9c51d92087a665da81e751fa62b66014502aa /gcc
parent1a5c82919c27a6af5eba0c2ba147dd011003cf72 (diff)
downloadgcc-b04093adb28bd6ee8b0390e840219fd2bba134db.zip
gcc-b04093adb28bd6ee8b0390e840219fd2bba134db.tar.gz
gcc-b04093adb28bd6ee8b0390e840219fd2bba134db.tar.bz2
PR middle-end/55288 - Improve handling/suppression of maybe-uninitialized warnings
gcc/testsuite/ChangeLog: PR middle-end/55288 * g++.dg/warn/uninit-pr55288.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.dg/warn/uninit-pr55288.C43
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/warn/uninit-pr55288.C b/gcc/testsuite/g++.dg/warn/uninit-pr55288.C
new file mode 100644
index 0000000..12fbc56
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/uninit-pr55288.C
@@ -0,0 +1,43 @@
+/* PR tree-optimization/55288 - Improve handling/suppression of
+ maybe-uninitialized warnings
+ { dg-do compile }
+ { dg-options "-O2 -Wall" } */
+
+struct iterator
+{
+ operator int ();
+ iterator operator++ (int);
+};
+
+void bar (int);
+
+static void foo (int x)
+{
+ bar (x); // { dg-bogus "uninitialized" }
+}
+
+int baz (iterator j, iterator end, int p)
+{
+ bool valid = false;
+ int q;
+ for (; j != end; j++) {
+ if (p > j) {
+ if (not valid)
+ p = j;
+ break;
+ }
+ else if (p == j) {
+ valid = true;
+ q = -1;
+ }
+ else {
+ valid = true;
+ q = j;
+ }
+ }
+
+ if (valid)
+ foo (q);
+
+ return p;
+}