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/fortran/trans-decl.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/fortran/trans-decl.c')
-rw-r--r-- | gcc/fortran/trans-decl.c | 22 |
1 files changed, 2 insertions, 20 deletions
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 6a4c3e4..4e72a23 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -581,26 +581,8 @@ gfc_finish_var_decl (tree decl, gfc_symbol * sym) if (!sym->attr.target && !sym->attr.pointer - && !sym->attr.proc_pointer - /* For now, don't bother with aggregate types. We would need - to adjust DECL_CONTEXT of all field decls. */ - && !AGGREGATE_TYPE_P (TREE_TYPE (decl))) - { - tree type = TREE_TYPE (decl); - if (!TYPE_LANG_SPECIFIC (type)) - TYPE_LANG_SPECIFIC (type) = (struct lang_type *) - ggc_alloc_cleared (sizeof (struct lang_type)); - if (!TYPE_LANG_SPECIFIC (type)->nontarget_type) - { - alias_set_type set = new_alias_set (); - type = build_distinct_type_copy (type); - TYPE_ALIAS_SET (type) = set; - TYPE_LANG_SPECIFIC (type)->nontarget_type = type; - } - else - type = TYPE_LANG_SPECIFIC (type)->nontarget_type; - TREE_TYPE (decl) = type; - } + && !sym->attr.proc_pointer) + DECL_RESTRICTED_P (decl) = 1; } |