aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/class.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/class.c')
-rw-r--r--gcc/fortran/class.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 93118ad..6b01766 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -1602,7 +1602,6 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
gfc_code *last_code, *block;
char *name;
bool finalizable_comp = false;
- bool expr_null_wrapper = false;
gfc_expr *ancestor_wrapper = NULL, *rank;
gfc_iterator *iter;
@@ -1636,7 +1635,11 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
&& !derived->attr.alloc_comp
&& (!derived->f2k_derived || !derived->f2k_derived->finalizers)
&& !has_finalizer_component (derived))
- expr_null_wrapper = true;
+ {
+ vtab_final->initializer = gfc_get_null_expr (NULL);
+ gcc_assert (vtab_final->ts.interface == NULL);
+ return;
+ }
else
/* Check whether there are new allocatable components. */
for (comp = derived->components; comp; comp = comp->next)
@@ -1650,7 +1653,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
/* If there is no new finalizer and no new allocatable, return with
an expr to the ancestor's one. */
- if (!expr_null_wrapper && !finalizable_comp
+ if (!finalizable_comp
&& (!derived->f2k_derived || !derived->f2k_derived->finalizers))
{
gcc_assert (ancestor_wrapper && ancestor_wrapper->ref == NULL
@@ -1674,8 +1677,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
/* Set up the namespace. */
sub_ns = gfc_get_namespace (ns, 0);
sub_ns->sibling = ns->contained;
- if (!expr_null_wrapper)
- ns->contained = sub_ns;
+ ns->contained = sub_ns;
sub_ns->resolved = 1;
/* Set up the procedure symbol. */
@@ -1691,7 +1693,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
final->ts.kind = 4;
final->attr.artificial = 1;
final->attr.always_explicit = 1;
- final->attr.if_source = expr_null_wrapper ? IFSRC_IFBODY : IFSRC_DECL;
+ final->attr.if_source = IFSRC_DECL;
if (ns->proc_name->attr.flavor == FL_MODULE)
final->module = ns->proc_name->name;
gfc_set_sym_referenced (final);
@@ -1741,15 +1743,6 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns,
final->formal->next->next->sym = fini_coarray;
gfc_commit_symbol (fini_coarray);
- /* Return with a NULL() expression but with an interface which has
- the formal arguments. */
- if (expr_null_wrapper)
- {
- vtab_final->initializer = gfc_get_null_expr (NULL);
- vtab_final->ts.interface = final;
- return;
- }
-
/* Local variables. */
gfc_get_symbol ("idx", sub_ns, &idx);