false, false, NULL_TREE, NULL_TREE);
gfc_add_expr_to_block (&fnblock, tmp);
}
- else if ((c->attr.allocatable)
- && !c->attr.proc_pointer && !same_type
- && (!(cmp_has_alloc_comps && c->as) || c->attr.codimension
- || caf_in_coarray (caf_mode)))
+ else if (c->attr.allocatable && !c->attr.proc_pointer
+ && (!(cmp_has_alloc_comps && c->as) || c->attr.codimension
+ || caf_in_coarray (caf_mode)))
{
rank = c->as ? c->as->rank : 0;
if (c->attr.codimension)
--- /dev/null
+!{ dg-do run }
+!
+! Contributed Vladimir Terzi <vterzi1996@gmail.com>
+! Check that deep-copy for b=a works.
+
+program pr114672
+ type node
+ integer::val
+ type(node),allocatable::next
+ end type
+
+ type(node)::a,b
+
+ allocate(a%next)
+ a%val=1
+ a%next%val=2
+! print*,a%val,a%next%val
+ b=a
+ b%val=3
+ b%next%val=4
+ if (loc(b) == loc(a)) stop 1
+ if (loc(b%next) == loc(a%next)) stop 2
+! print*,a%val,a%next%val
+ deallocate(b%next)
+ if (.NOT. allocated(a%next)) stop 3
+! print*,a%val,a%next%val
+ deallocate(a%next)
+end
+