if (ifc->result)
{
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;
}
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->attr.function = ifc->attr.function;
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.elemental = ifc->attr.elemental;
- sym->attr.dimension = ifc->attr.dimension;
sym->attr.contiguous = ifc->attr.contiguous;
sym->attr.recursive = ifc->attr.recursive;
sym->attr.always_explicit = ifc->attr.always_explicit;
sym->attr.ext_attr |= ifc->attr.ext_attr;
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. */
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>
Richard Biener <rguenther@suse.de>
-
+
* gcc.dg/gimplefe-1.c: New testcase.
* gcc.dg/gimplefe-2.c: Likewise.
* gcc.dg/gimplefe-3.c: Likewise.
--- /dev/null
+! { 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