Commit 50aa64d5 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/71581 (ICE on valid code on x86_64-linux-gnu with…

re PR middle-end/71581 (ICE on valid code on x86_64-linux-gnu with -Wuninitialized (Segmentation fault))

	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.

	* gcc.dg/pr71581.c: New test.

From-SVN: r237621
parent 7a9df68e
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.
......
/* 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" } */
}
......@@ -131,6 +131,29 @@ warn_uninit (enum opt_code wc, tree t, tree expr, tree var,
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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment