2016-06-20 Jakub Jelinek <jakub@redhat.com>
+ PR middle-end/71581
+ * tree-ssa-uninit.c (warn_uninit): If EXPR and VAR are NULL,
+ see if T isn't anonymous SSA_NAME with COMPLEX_EXPR created
+ for conversion of scalar user var to complex type and use the
+ underlying SSA_NAME_VAR in that case. If EXPR is still NULL,
+ punt.
+
PR rtl-optimization/71591
* toplev.c (toplev::run_self_tests): If no_backend, complain and
don't run any tests.
2016-06-20 Jakub Jelinek <jakub@redhat.com>
+ PR middle-end/71581
+ * gcc.dg/pr71581.c: New test.
+
PR rtl-optimization/71591
* gcc.dg/cpp/pr71591.c: New test.
--- /dev/null
+/* PR middle-end/71581 */
+/* { dg-do compile } */
+/* { dg-options "-Wuninitialized" } */
+
+_Complex float
+f1 (void)
+{
+ float x;
+ return x; /* { dg-warning "is used uninitialized in this function" } */
+}
+
+_Complex double
+f2 (void)
+{
+ double x;
+ return x; /* { dg-warning "is used uninitialized in this function" } */
+}
+
+_Complex int
+f3 (void)
+{
+ int x;
+ return x; /* { dg-warning "is used uninitialized in this function" } */
+}
if (!has_undefined_value_p (t))
return;
+ /* Anonymous SSA_NAMEs shouldn't be uninitialized, but ssa_undefined_value_p
+ can return true if the def stmt of anonymous SSA_NAME is COMPLEX_EXPR
+ created for conversion from scalar to complex. Use the underlying var of
+ the COMPLEX_EXPRs real part in that case. See PR71581. */
+ if (expr == NULL_TREE
+ && var == NULL_TREE
+ && SSA_NAME_VAR (t) == NULL_TREE
+ && is_gimple_assign (SSA_NAME_DEF_STMT (t))
+ && gimple_assign_rhs_code (SSA_NAME_DEF_STMT (t)) == COMPLEX_EXPR)
+ {
+ tree v = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (t));
+ if (TREE_CODE (v) == SSA_NAME
+ && has_undefined_value_p (v)
+ && zerop (gimple_assign_rhs2 (SSA_NAME_DEF_STMT (t))))
+ {
+ expr = SSA_NAME_VAR (v);
+ var = expr;
+ }
+ }
+
+ if (expr == NULL_TREE)
+ return;
+
/* TREE_NO_WARNING either means we already warned, or the front end
wishes to suppress the warning. */
if ((context