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:
parent
41e106896a
commit
e7d764f367
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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" } */
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue