re PR tree-optimization/56396 (memory corruption in cc1)

2013-02-20  Richard Biener  <rguenther@suse.de>
	Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/56396
	* tree-ssa-ccp.c (n_const_val): New static variable.
	(get_value): Return NULL for SSA names we don't have a lattice
	entry for.
	(ccp_initialize): Initialize n_const_val.
	* tree-ssa-copy.c (n_copy_of): New static variable.
	(init_copy_prop): Initialize n_copy_of.
	(get_value): Return NULL_TREE for SSA names we don't have a
	lattice entry for.

	* gcc.dg/pr56396.c: New testcase.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r196170
This commit is contained in:
Richard Biener 2013-02-20 11:39:39 +00:00 committed by Richard Biener
parent 3d916479cf
commit e91c8ed63f
5 changed files with 53 additions and 4 deletions

View File

@ -1,3 +1,16 @@
2013-02-20 Richard Biener <rguenther@suse.de>
Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/56396
* tree-ssa-ccp.c (n_const_val): New static variable.
(get_value): Return NULL for SSA names we don't have a lattice
entry for.
(ccp_initialize): Initialize n_const_val.
* tree-ssa-copy.c (n_copy_of): New static variable.
(init_copy_prop): Initialize n_copy_of.
(get_value): Return NULL_TREE for SSA names we don't have a
lattice entry for.
2013-02-20 Martin Jambor <mjambor@suse.cz>
* ipa-cp.c (initialize_node_lattices): Fix dumping condition.

View File

@ -1,3 +1,9 @@
2013-02-20 Richard Biener <rguenther@suse.de>
Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/56396
* gcc.dg/pr56396.c: New testcase.
2013-02-20 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56373

View File

@ -0,0 +1,22 @@
/* PR tree-optimization/56396 */
/* { dg-do compile } */
/* { dg-options "-O2 -fpic -g" } */
struct S { char *s; int z; };
struct T { int t; } *c, u;
void bar (int, const char *);
inline void *
foo (void *x, char *y, int z)
{
struct S s;
char b[256];
s.s = b;
s.z = __builtin___sprintf_chk (s.s, 1, __builtin_object_size (s.s, 2), "Require");
if (s.z < 0)
bar (u.t | c->t, "rls");
if (foo (x, s.s, s.z))
{
}
return (void *) 0;
}

View File

@ -162,6 +162,7 @@ typedef struct prop_value_d prop_value_t;
memory reference used to store (i.e., the LHS of the assignment
doing the store). */
static prop_value_t *const_val;
static unsigned n_const_val;
static void canonicalize_float_value (prop_value_t *);
static bool ccp_fold_stmt (gimple_stmt_iterator *);
@ -295,7 +296,8 @@ get_value (tree var)
{
prop_value_t *val;
if (const_val == NULL)
if (const_val == NULL
|| SSA_NAME_VERSION (var) >= n_const_val)
return NULL;
val = &const_val[SSA_NAME_VERSION (var)];
@ -713,7 +715,8 @@ ccp_initialize (void)
{
basic_block bb;
const_val = XCNEWVEC (prop_value_t, num_ssa_names);
n_const_val = num_ssa_names;
const_val = XCNEWVEC (prop_value_t, n_const_val);
/* Initialize simulation flags for PHI nodes and statements. */
FOR_EACH_BB (bb)

View File

@ -280,6 +280,7 @@ struct prop_value_d {
typedef struct prop_value_d prop_value_t;
static prop_value_t *copy_of;
static unsigned n_copy_of;
/* Return true if this statement may generate a useful copy. */
@ -664,7 +665,8 @@ init_copy_prop (void)
{
basic_block bb;
copy_of = XCNEWVEC (prop_value_t, num_ssa_names);
n_copy_of = num_ssa_names;
copy_of = XCNEWVEC (prop_value_t, n_copy_of);
FOR_EACH_BB (bb)
{
@ -728,7 +730,10 @@ init_copy_prop (void)
static tree
get_value (tree name)
{
tree val = copy_of[SSA_NAME_VERSION (name)].value;
tree val;
if (SSA_NAME_VERSION (name) >= n_copy_of)
return NULL_TREE;
val = copy_of[SSA_NAME_VERSION (name)].value;
if (val && val != name)
return val;
return NULL_TREE;