Commit 957a1b14 by Paul Thomas

Patch and ChangeLogs for PR92976

parent 12caab4f
2020-03-01 Paul Thomas <pault@gcc.gnu.org> 2020-03-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/92976
* match.c (select_type_set_tmp): If the selector array spec has
explicit bounds, make the temporary's bounds deferred.
2020-03-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/92959 PR fortran/92959
* trans-intrinsic.c (gfc_conv_associated): Eliminate * trans-intrinsic.c (gfc_conv_associated): Eliminate
'nonzero_charlen' and move the chunk to evaluate zero character 'nonzero_charlen' and move the chunk to evaluate zero character
......
...@@ -6327,8 +6327,14 @@ select_type_set_tmp (gfc_typespec *ts) ...@@ -6327,8 +6327,14 @@ select_type_set_tmp (gfc_typespec *ts)
= CLASS_DATA (selector)->attr.dimension; = CLASS_DATA (selector)->attr.dimension;
sym->attr.codimension sym->attr.codimension
= CLASS_DATA (selector)->attr.codimension; = CLASS_DATA (selector)->attr.codimension;
sym->as if (CLASS_DATA (selector)->as->type != AS_EXPLICIT)
= gfc_copy_array_spec (CLASS_DATA (selector)->as); sym->as = gfc_copy_array_spec (CLASS_DATA (selector)->as);
else
{
sym->as = gfc_get_array_spec();
sym->as->rank = CLASS_DATA (selector)->as->rank;
sym->as->type = AS_DEFERRED;
}
} }
} }
......
2020-03-01 Paul Thomas <pault@gcc.gnu.org> 2020-03-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/92976
* gfortran.dg/select_type_48.f90 : New test.
2020-03-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/92959 PR fortran/92959
* gfortran.dg/associated_8.f90 : New test. * gfortran.dg/associated_8.f90 : New test.
......
! { dg-do run }
!
! Test the fix for PR92976, in which the TYPE IS statement caused an ICE
! because of the explicit bounds of 'x'.
!
! Contributed by Gerhard Steinmetz <gscfq@t-online.de>
!
program p
type t
integer :: i
end type
class(t), allocatable :: c(:)
allocate (c, source = [t(1111),t(2222),t(3333)])
call s(c)
if (sum (c%i) .ne. 3333) stop 1
contains
subroutine s(x)
class(t) :: x(2)
select type (x)
! ICE as compiler attempted to assign descriptor to an array
type is (t)
x%i = 0
! Make sure that bounds are correctly translated.
call counter (x)
end select
end
subroutine counter (arg)
type(t) :: arg(:)
if (size (arg, 1) .ne. 2) stop 2
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