Commit d809e15a by Janus Weil

re PR fortran/78300 ([OOP] Failure to compile a F03 code with an optional dummy procedure argument)

2016-11-14  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/78300
	* resolve.c (resolve_procedure_interface): Properly handle CLASS-valued
	function results.

2016-11-14  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/78300
	* gfortran.dg/class_result_3.f90: New test.

From-SVN: r242392
parent 9daa4c72
2016-11-14 Janus Weil <janus@gcc.gnu.org>
PR fortran/78300
* resolve.c (resolve_procedure_interface): Properly handle CLASS-valued
function results.
2016-11-13 Janus Weil <janus@gcc.gnu.org> 2016-11-13 Janus Weil <janus@gcc.gnu.org>
PR fortran/60952 PR fortran/60952
......
...@@ -214,27 +214,33 @@ resolve_procedure_interface (gfc_symbol *sym) ...@@ -214,27 +214,33 @@ resolve_procedure_interface (gfc_symbol *sym)
if (ifc->result) if (ifc->result)
{ {
sym->ts = ifc->result->ts; sym->ts = ifc->result->ts;
sym->attr.allocatable = ifc->result->attr.allocatable;
sym->attr.pointer = ifc->result->attr.pointer;
sym->attr.dimension = ifc->result->attr.dimension;
sym->attr.class_ok = ifc->result->attr.class_ok;
sym->as = gfc_copy_array_spec (ifc->result->as);
sym->result = sym; sym->result = sym;
} }
else else
{
sym->ts = ifc->ts; sym->ts = ifc->ts;
sym->attr.allocatable = ifc->attr.allocatable;
sym->attr.pointer = ifc->attr.pointer;
sym->attr.dimension = ifc->attr.dimension;
sym->attr.class_ok = ifc->attr.class_ok;
sym->as = gfc_copy_array_spec (ifc->as);
}
sym->ts.interface = ifc; sym->ts.interface = ifc;
sym->attr.function = ifc->attr.function; sym->attr.function = ifc->attr.function;
sym->attr.subroutine = ifc->attr.subroutine; sym->attr.subroutine = ifc->attr.subroutine;
sym->attr.allocatable = ifc->attr.allocatable;
sym->attr.pointer = ifc->attr.pointer;
sym->attr.pure = ifc->attr.pure; sym->attr.pure = ifc->attr.pure;
sym->attr.elemental = ifc->attr.elemental; sym->attr.elemental = ifc->attr.elemental;
sym->attr.dimension = ifc->attr.dimension;
sym->attr.contiguous = ifc->attr.contiguous; sym->attr.contiguous = ifc->attr.contiguous;
sym->attr.recursive = ifc->attr.recursive; sym->attr.recursive = ifc->attr.recursive;
sym->attr.always_explicit = ifc->attr.always_explicit; sym->attr.always_explicit = ifc->attr.always_explicit;
sym->attr.ext_attr |= ifc->attr.ext_attr; sym->attr.ext_attr |= ifc->attr.ext_attr;
sym->attr.is_bind_c = ifc->attr.is_bind_c; sym->attr.is_bind_c = ifc->attr.is_bind_c;
sym->attr.class_ok = ifc->attr.class_ok;
/* Copy array spec. */
sym->as = gfc_copy_array_spec (ifc->as);
/* Copy char length. */ /* Copy char length. */
if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl) if (ifc->ts.type == BT_CHARACTER && ifc->ts.u.cl)
{ {
......
2016-11-14 Janus Weil <janus@gcc.gnu.org>
PR fortran/78300
* gfortran.dg/class_result_3.f90: New test.
2016-11-14 Prasad Ghangal <prasad.ghangal@gmail.com> 2016-11-14 Prasad Ghangal <prasad.ghangal@gmail.com>
Richard Biener <rguenther@suse.de> Richard Biener <rguenther@suse.de>
......
! { dg-do compile }
!
! PR 78300: [OOP] Failure to compile a F03 code with an optional dummy procedure argument
!
! Contributed by DIL <liakhdi@ornl.gov>
implicit none
type gfc_cont_elem_t
end type
contains
function gfc_copy_i() result(clone)
class(gfc_cont_elem_t), pointer:: clone
end
subroutine ContElemConstruct(copy_constr_func)
procedure(gfc_copy_i) :: copy_constr_func
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment