summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/internal_pack_13.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/internal_pack_13.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/internal_pack_13.f9034
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/internal_pack_13.f90 b/gcc/testsuite/gfortran.dg/internal_pack_13.f90
new file mode 100644
index 000000000..21fdc5418
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/internal_pack_13.f90
@@ -0,0 +1,34 @@
+! { dg-do run }
+!
+! PR 55072: [4.6/4.7/4.8 Regression] Missing internal_pack leads to wrong code with derived type
+!
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+
+implicit none
+type t
+integer :: i
+end type t
+type(t), target :: tgt(4,4)
+type(t), pointer :: p(:,:)
+integer :: i,j,k
+
+k = 1
+do i = 1, 4
+ do j = 1, 4
+ tgt(i,j)%i = k
+ k = k+1
+ end do
+end do
+
+p => tgt(::2,::2)
+print *,p%i
+call bar(p)
+
+contains
+
+ subroutine bar(x)
+ type(t) :: x(*)
+ print *,x(1:4)%i
+ if (any (x(1:4)%i /= [1, 9, 3, 11])) call abort()
+ end subroutine
+end