]> gcc.gnu.org Git - gcc.git/commitdiff
PR tree-optimization/59970 - Bogus -Wmaybe-uninitialized at low optimization levels
authorMartin Sebor <msebor@redhat.com>
Fri, 26 Mar 2021 22:37:34 +0000 (16:37 -0600)
committerMartin Sebor <msebor@redhat.com>
Fri, 26 Mar 2021 22:40:39 +0000 (16:40 -0600)
PR tree-optimization/59970
* gcc.dg/uninit-pr59970.c: New test.

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

diff --git a/gcc/testsuite/gcc.dg/uninit-pr59970.c b/gcc/testsuite/gcc.dg/uninit-pr59970.c
new file mode 100644 (file)
index 0000000..145af65
--- /dev/null
@@ -0,0 +1,79 @@
+/* PR tree-optimization/59970 - Bogus -Wmaybe-uninitialized at low optimization
+   levels
+   { dg-do compile }
+   { dg-options "-Wall" } */
+
+#pragma GCC push_options
+#pragma GCC optimize ("1")
+
+__attribute__ ((noipa)) int
+d_demangle_callback_O1 (const char *mangled)
+{
+  enum { DCT_TYPE, DCT_GLOBAL_DTORS } type;
+  int dc;
+
+  /* Fails for -Og and -O1.  */
+  if (mangled)
+    type = DCT_GLOBAL_DTORS;
+  else
+    type = DCT_TYPE;
+
+  /* If both cases assign the same value, all is fine.  */
+  switch (type)
+    {
+    case DCT_TYPE:
+      dc = 0 /* 1 */;
+      break;
+    case DCT_GLOBAL_DTORS:
+      dc = /* 0 */ 1;
+      break;
+
+      /* If this is added, all is fine.  */
+#ifdef ABORT
+    default:
+      __builtin_unreachable ();
+#endif
+    }
+
+  return dc;        // { dg-bogus "uninitialized" }
+}
+
+#pragma GCC pop_options
+
+
+#pragma GCC optimize ("Og")
+
+__attribute__ ((noipa)) int
+d_demangle_callback_Og (const char *mangled)
+{
+  enum { DCT_TYPE, DCT_GLOBAL_DTORS } type;
+  int dc;
+
+  /* Fails for -Og.  */
+  /* Removing either the function call or the array dereference, it'll be like
+     the TOGGLE1 case.  */
+  extern int cmp (void);
+  if (cmp () && mangled[0])
+    type = DCT_GLOBAL_DTORS;
+  else
+    type = DCT_TYPE;
+
+  /* If both cases assign the same value, all is fine.  */
+  switch (type)
+    {
+    case DCT_TYPE:
+      dc = 0 /* 1 */;
+      break;
+    case DCT_GLOBAL_DTORS:
+      dc = /* 0 */ 1;
+      break;
+
+      /* If this is added, all is fine.  */
+#ifdef ABORT
+    default:
+      __builtin_unreachable ();
+#endif
+    }
+
+  return dc;        // { dg-bogus "uninitialized" }
+}
This page took 0.092384 seconds and 5 git commands to generate.