https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117901

--- Comment #5 from Paul Thomas <pault at gcc dot gnu.org> ---
(In reply to Paul Thomas from comment #4)
...snip...
> I will now clean up the patch and produce a suitably reduced testcase that
> isolates the problem.
> 
> Paul

This was my attempt at a testcase, which is more fundamentally broken than
class_transformational_1.f90:

   class(*), allocatable :: x(:,:)
   x = reshape ([1,2,3,4], [2,2])
   call foo (foobar(x))    ! Segfault here - _data component of 'foobar' result
passed!
contains
   function foobar(arg2) result(res)
     class(*), contiguous, target :: arg2(:,:)
     class(*), pointer :: res(:)
     res(1:size(arg2)) => arg2(:,:)
!     select type (res)    ! With this uncommented, gives "STOP 1"
!        type is (integer) ! Otherwise a segfault at entry to 'foo'
!          print *, res
!     end select
   end
   subroutine foo(arg1)
      class(*) :: arg1(:)
      call bar(arg1)
   end
   subroutine bar(arg)
      class(*) :: arg(..)
      select rank (arg)
        rank (1)
          select type (arg)
            type is (integer)
              print *, arg
            class default
              stop 1
          end select
        rank default
          stop 2
      end select
   end
end

Other brands give the expected result.

Paul

Reply via email to