https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105168
Paul Thomas <pault at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |pault at gcc dot gnu.org
--- Comment #8 from Paul Thomas <pault at gcc dot gnu.org> ---
Created attachment 60039
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60039&action=edit
Partial fix for this PR
The attached fixes the original testcase.
The first chunk gets rid of the segfault since it passes a class container to
'f', rather than the array descriptor.
The second chunk resets the temporary descriptor lbounds to one, adjusts the
ubounds accordingly and sets the offset.
The first chunk in gfc_trans_arrayfunc_assign is required for the variant at
the bottom of this comment, which segfaults even without braces around 'y'.
If the component of 't' is made allocatable, a load of invalid reads and use of
uninitialised value errors appear. I am working on this.
Paul
! Interface mapping is failing with CLASS 'x' and parentheses around
! the actual argument.
module m
type t
integer :: a
contains
final :: final_t
end type
integer :: cntr = 0
contains
function f(x) result(z)
class(t) :: x(:) ! Worked, with or without parentheses if s/CLASS/TYPE/
type(t) :: z(2)
z = x
end
subroutine final_t (arg)
type (t) :: arg
cntr = cntr + 1
end subroutine
end module
program p
use m
class(t), allocatable :: y(:), z(:)
y = [t(2),t(4)]
allocate (t :: z(2))
call foo
print *, z(1)%a
deallocate (y, z)
print *, cntr
contains
subroutine foo
z = f((y)) ! Failed even with parentheses removed
end
end