diff options
Diffstat (limited to 'gcc/testsuite/gfortran.dg/unlimited_polymorphic_13.f90')
-rw-r--r-- | gcc/testsuite/gfortran.dg/unlimited_polymorphic_13.f90 | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/unlimited_polymorphic_13.f90 b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_13.f90 new file mode 100644 index 0000000000..8225738e74 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_13.f90 @@ -0,0 +1,73 @@ +! { dg-do run } +! +! PR fortran/58793 +! +! Contributed by Vladimir Fuka +! +! Had the wrong value for the storage_size for complex +! +module m + use iso_fortran_env + implicit none + integer, parameter :: c1 = real_kinds(1) + integer, parameter :: c2 = real_kinds(2) + integer, parameter :: c3 = real_kinds(size(real_kinds)-1) + integer, parameter :: c4 = real_kinds(size(real_kinds)) + real(c1) :: r1 + real(c2) :: r2 + real(c3) :: r3 + real(c4) :: r4 +contains + subroutine s(o, k) + class(*) :: o + integer :: k + integer :: sz + + sz = 0 + select case (k) + case (4) + sz = storage_size(r1)*2 + end select + select case (k) + case (8) + sz = storage_size(r2)*2 + end select + select case (k) + case (real_kinds(size(real_kinds)-1)) + sz = storage_size(r3)*2 + end select + select case (k) + case (real_kinds(size(real_kinds))) + sz = storage_size(r4)*2 + end select + if (sz .eq. 0) call abort() + + if (storage_size(o) /= sz) call abort() + +! Break up the SELECT TYPE to pre-empt collisions in the value of 'cn' + select type (o) + type is (complex(c1)) + if (storage_size(o) /= sz) call abort() + end select + select type (o) + type is (complex(c2)) + if (storage_size(o) /= sz) call abort() + end select + select type (o) + type is (complex(c3)) + if (storage_size(o) /= sz) call abort() + end select + select type (o) + type is (complex(c4)) + if (storage_size(o) /= sz) call abort() + end select + end subroutine s +end module m + +program p + use m + call s((1._c1, 2._c1), c1) + call s((1._c2, 2._c2), c2) + call s((1._c3, 2._c3), c3) + call s((1._c4, 2._c4), c4) +end program p |