diff options
author | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-09 18:42:28 +0000 |
---|---|---|
committer | pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-09 18:42:28 +0000 |
commit | 25dd7350310698129444c28d7303f591d8a0af21 (patch) | |
tree | 24d34b4ba251e9f21674a4a86c639715a08502f3 /gcc/fortran/resolve.c | |
parent | 8187c3ba39f3119fb586cdd1262178fc9f7c12ec (diff) | |
download | gcc-25dd7350310698129444c28d7303f591d8a0af21.tar.gz |
2006-11-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29699
* trans-array.c (structure_alloc_comps): Detect pointers to
arrays and use indirect reference to declaration.
* resolve.c (resolve_fl_variable): Tidy up condition.
(resolve_symbol): The same and only add initialization code if
the symbol is referenced.
* trans-decl.c (gfc_trans_deferred_vars): Call gfc_trans_
deferred_array before gfc_trans_auto_array_allocation.
PR fortran/21730
* symbol.c (check_done): Remove.
(gfc_add_attribute): Remove reference to check_done and remove
the argument attr_intent.
(gfc_add_allocatable, gfc_add_dimension, gfc_add_external,
gfc_add_intrinsic, gfc_add_optional, gfc_add_pointer,
gfc_add_cray_pointer, gfc_add_cray_pointee, gfc_add_result,
gfc_add_target, gfc_add_in_common, gfc_add_elemental,
gfc_add_pure, gfc_add_recursive, gfc_add_procedure,
gfc_add_type): Remove references to check_done.
* decl.c (attr_decl1): Eliminate third argument in call to
gfc_add_attribute.
* gfortran.h : Change prototype for gfc_add_attribute.
2006-11-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29699
* gfortran.dg/alloc_comp_auto_array_1.f90: New test.
PR fortran/21730
* gfortran.dg/change_symbol_attributes_1.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118624 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 8cf967808c6..872713f6fe5 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -5497,8 +5497,11 @@ resolve_fl_variable (gfc_symbol *sym, int mp_flag) } /* Assign default initializer. */ - if (sym->ts.type == BT_DERIVED && !sym->value && !sym->attr.pointer - && !sym->attr.allocatable && (!flag || sym->attr.intent == INTENT_OUT)) + if (sym->ts.type == BT_DERIVED + && !sym->value + && !sym->attr.pointer + && !sym->attr.allocatable + && (!flag || sym->attr.intent == INTENT_OUT)) sym->value = gfc_default_initializer (&sym->ts); return SUCCESS; @@ -6036,8 +6039,12 @@ resolve_symbol (gfc_symbol * sym) /* If we have come this far we can apply default-initializers, as described in 14.7.5, to those variables that have not already been assigned one. */ - if (sym->ts.type == BT_DERIVED && sym->ns == gfc_current_ns && !sym->value - && !sym->attr.allocatable && !sym->attr.alloc_comp) + if (sym->ts.type == BT_DERIVED + && sym->attr.referenced + && sym->ns == gfc_current_ns + && !sym->value + && !sym->attr.allocatable + && !sym->attr.alloc_comp) { symbol_attribute *a = &sym->attr; |