summaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-decl.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/trans-decl.c')
-rw-r--r--gcc/fortran/trans-decl.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 92bc0dc1e57..332cc725577 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -4366,22 +4366,24 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block)
gfc_set_backend_locus (&sym->declared_at);
gfc_start_block (&init);
- if (!sym->attr.dummy && descriptor != NULL_TREE)
+ if (!sym->attr.dummy && sym->ts.type == BT_CLASS
+ && CLASS_DATA (sym)->as)
{
+ tree cdesc = gfc_class_data_get (sym->backend_decl);
tree type = TREE_TYPE (CLASS_DATA (sym)->backend_decl);
- gcc_assert (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as);
- gfc_conv_descriptor_elem_len_set (&init, descriptor,
+ gfc_conv_descriptor_elem_len_set (&init, cdesc,
TYPE_SIZE_UNIT (gfc_get_element_type (type)));
- gfc_conv_descriptor_version_set (&init, descriptor);
- gfc_conv_descriptor_rank_set (&init, descriptor,
+ gfc_conv_descriptor_version_set (&init, cdesc);
+ gfc_conv_descriptor_rank_set (&init, cdesc,
CLASS_DATA (sym)->as->rank);
- tmp = gfc_conv_descriptor_dtype (descriptor);
+ tmp = gfc_conv_descriptor_dtype (cdesc);
gfc_add_modify (&init, tmp, gfc_get_dtype (&sym->ts));
- gfc_conv_descriptor_attr_set (&init, descriptor,
- CLASS_DATA (sym)->attr.allocatable
- ? GFC_ATTRIBUTE_ALLOCATABLE
- : GFC_ATTRIBUTE_POINTER);
+ gfc_conv_descriptor_attr_set (&init, cdesc,
+ CLASS_DATA (sym)->attr.allocatable
+ ? GFC_ATTRIBUTE_ALLOCATABLE
+ : GFC_ATTRIBUTE_POINTER);
}
+
if (!sym->attr.pointer)
{
/* Nullify and automatic deallocation of allocatable