diff options
author | Michael Matz <matz@suse.de> | 2009-09-16 16:12:18 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2009-09-16 16:12:18 +0000 |
commit | 9b87db3c0fc95b7f76fcdc38e21371dff155ee4b (patch) | |
tree | 16bc7e6ccab2dd7b94d385eb0dc4572ffb988dc7 /gcc/tree-ssa-alias.c | |
parent | 798763075fa686158fc9b40b2e6b3bc57320dd5a (diff) | |
download | gcc-9b87db3c0fc95b7f76fcdc38e21371dff155ee4b.zip gcc-9b87db3c0fc95b7f76fcdc38e21371dff155ee4b.tar.gz gcc-9b87db3c0fc95b7f76fcdc38e21371dff155ee4b.tar.bz2 |
re PR fortran/41212 (miscompilation at -O2)
PR fortran/41212
* tree.h (struct tree_decl_common): Add decl_restricted_flag,
shorten decl_common_unused.
(DECL_RESTRICTED_P): New accessor.
* tree-ssa-alias.c (ptr_deref_may_alias_decl_p): Use it
to disambiguate marked decls and restrict pointers.
fortran/
* trans.h (struct lang_type): Remove nontarget_type member.
* trans.c (gfc_add_modify): Don't access it.
* trans-decl.c (gfc_finish_var_decl): Don't allocate and set it,
instead set DECL_RESTRICTED_P on affected decls.
testsuite/
* gfortran.dg/pr41212.f90: New test.
From-SVN: r151761
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r-- | gcc/tree-ssa-alias.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 9522b28..e619190 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -208,6 +208,14 @@ ptr_deref_may_alias_decl_p (tree ptr, tree decl) if (!pi) return true; + /* If the decl can be used as a restrict tag and we have a restrict + pointer and that pointers points-to set doesn't contain this decl + then they can't alias. */ + if (DECL_RESTRICTED_P (decl) + && TYPE_RESTRICT (TREE_TYPE (ptr)) + && pi->pt.vars_contains_restrict) + return bitmap_bit_p (pi->pt.vars, DECL_UID (decl)); + return pt_solution_includes (&pi->pt, decl); } |