diff options
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr56396.c | 22 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-copy.c | 9 |
5 files changed, 53 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7f9b13f..5e18a6c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0135609..838de3c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gcc.dg/pr56396.c b/gcc/testsuite/gcc.dg/pr56396.c new file mode 100644 index 0000000..d2ec8fa --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr56396.c @@ -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; +} diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index d8f03a1..b4faded 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -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) diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c index 551ebe3..75a4154 100644 --- a/gcc/tree-ssa-copy.c +++ b/gcc/tree-ssa-copy.c @@ -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; |