diff options
author | Richard Guenther <rguenther@suse.de> | 2007-08-30 14:52:28 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2007-08-30 14:52:28 +0000 |
commit | af947da7a78ce3393b3aab0184170b2164062fab (patch) | |
tree | 9eeacebe1a49b871d1e85f4d48063ce6f2c00a3f | |
parent | a5ea943cb84931eaa0030ad49384d16d86a1d2b5 (diff) | |
download | gcc-af947da7a78ce3393b3aab0184170b2164062fab.zip gcc-af947da7a78ce3393b3aab0184170b2164062fab.tar.gz gcc-af947da7a78ce3393b3aab0184170b2164062fab.tar.bz2 |
re PR middle-end/33199 (tr1/2_general_utilities/shared_ptr/assign/auto_ptr.cc)
2007-08-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/33199
* tree-ssa-structalias.c (handle_lhs_call): New function.
(find_func_aliases): In non-IPA mode make sure that for
calls that return a pointer we add a constraint for the
result to point to anything.
From-SVN: r127927
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-ssa-structalias.c | 27 |
2 files changed, 34 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5d5249..f706cff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2007-08-30 Richard Guenther <rguenther@suse.de> + PR tree-optimization/33199 + * tree-ssa-structalias.c (handle_lhs_call): New function. + (find_func_aliases): In non-IPA mode make sure that for + calls that return a pointer we add a constraint for the + result to point to anything. + +2007-08-30 Richard Guenther <rguenther@suse.de> + * doc/invoke.texi (-mveclibabi): Document new target option. * config/i386/i386.opt (-mveclibabi): New target option. * config/i386/i386.c (ix86_veclib_handler): Handler for diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index dbece90..a379e7e 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -3655,6 +3655,27 @@ handle_rhs_call (tree rhs) } } +/* For non-IPA mode, generate constraints necessary for a call + that returns a pointer and assigns it to LHS. This simply makes + the LHS point to anything. */ + +static void +handle_lhs_call (tree lhs) +{ + VEC(ce_s, heap) *lhsc = NULL; + struct constraint_expr rhsc; + unsigned int j; + struct constraint_expr *lhsp; + + rhsc.var = anything_id; + rhsc.offset = 0; + rhsc.type = ADDRESSOF; + get_constraint_for (lhs, &lhsc); + for (j = 0; VEC_iterate (ce_s, lhsc, j, lhsp); j++) + process_constraint_1 (new_constraint (*lhsp, rhsc), true); + VEC_free (ce_s, heap, lhsc); +} + /* Walk statement T setting up aliasing constraints according to the references found in T. This function is the main part of the constraint builder. AI points to auxiliary alias information used @@ -3726,7 +3747,11 @@ find_func_aliases (tree origt) if (!in_ipa_mode) { if (TREE_CODE (t) == GIMPLE_MODIFY_STMT) - handle_rhs_call (GIMPLE_STMT_OPERAND (t, 1)); + { + handle_rhs_call (GIMPLE_STMT_OPERAND (t, 1)); + if (POINTER_TYPE_P (TREE_TYPE (GIMPLE_STMT_OPERAND (t, 1)))) + handle_lhs_call (GIMPLE_STMT_OPERAND (t, 0)); + } else handle_rhs_call (t); } |