re PR go/57045 (Build failure in libgo/runtime/proc.c: error: ‘({anonymous})’ may be used uninitialized in this function)

PR go/57045
	* tree-ssa-uninit.c (compute_uninit_opnds_pos): In functions
	with nonlocal goto receivers or returns twice calls, ignore
	unininitialized values from abnormal edges to nl goto receiver
	or returns twice call.

	* gcc.dg/setjmp-5.c: New test.

From-SVN: r198340
This commit is contained in:
Jakub Jelinek 2013-04-26 15:14:55 +02:00 committed by Jakub Jelinek
parent 41e106896a
commit e7d764f367
4 changed files with 50 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2013-04-26 Jakub Jelinek <jakub@redhat.com>
PR go/57045
* tree-ssa-uninit.c (compute_uninit_opnds_pos): In functions
with nonlocal goto receivers or returns twice calls, ignore
unininitialized values from abnormal edges to nl goto receiver
or returns twice call.
2013-04-26 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/57051

View File

@ -1,3 +1,8 @@
2013-04-26 Jakub Jelinek <jakub@redhat.com>
PR go/57045
* gcc.dg/setjmp-5.c: New test.
2013-04-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/55708

View File

@ -0,0 +1,22 @@
/* { dg-do compile } */
/* { dg-options "-O2 -Wall" } */
#include <setjmp.h>
void bar (int);
jmp_buf buf;
int v;
void
foo (void)
{
int i;
bar (0);
bar (1);
i = 5;
int j = setjmp (buf);
if (j == 0)
bar (2);
v = i; /* { dg-bogus "may be used uninitialized in this function" } */
}

View File

@ -151,7 +151,21 @@ compute_uninit_opnds_pos (gimple phi)
if (TREE_CODE (op) == SSA_NAME
&& ssa_undefined_value_p (op)
&& !can_skip_redundant_opnd (op, phi))
MASK_SET_BIT (uninit_opnds, i);
{
/* Ignore SSA_NAMEs on abnormal edges to setjmp
or nonlocal goto receiver. */
if (cfun->has_nonlocal_label || cfun->calls_setjmp)
{
edge e = gimple_phi_arg_edge (phi, i);
if (e->flags & EDGE_ABNORMAL)
{
gimple last = last_stmt (e->src);
if (last && stmt_can_make_abnormal_goto (last))
continue;
}
}
MASK_SET_BIT (uninit_opnds, i);
}
}
return uninit_opnds;
}