mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
7a9df68ec6
commit
50aa64d58f
|
@ -1,5 +1,12 @@
|
|||
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.
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
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.
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
/* 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
|
||||
|
|
Loading…
Reference in New Issue