diff options
Diffstat (limited to 'gcc/fortran/decl.cc')
| -rw-r--r-- | gcc/fortran/decl.cc | 14 | 
1 files changed, 14 insertions, 0 deletions
| diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index 569786a..5b222cd 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -3938,6 +3938,20 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym,    actual_param = param_list;    sprintf (name, "Pdt%s", pdt->name); +  /* Prevent a PDT component of the same type as the template from being +     converted into an instance. Doing this results in the component being +     lost.  */ +  if (gfc_current_state () == COMP_DERIVED +      && !(gfc_state_stack->previous +	   && gfc_state_stack->previous->state == COMP_DERIVED) +      && gfc_current_block ()->attr.pdt_template +      && !strcmp (gfc_current_block ()->name, (*sym)->name)) +    { +      if (ext_param_list) +	*ext_param_list = gfc_copy_actual_arglist (param_list); +      return MATCH_YES; +    } +    /* Run through the parameter name list and pick up the actual       parameter values or use the default values in the PDT declaration.  */    for (; type_param_name_list; | 
