re PR fortran/78290 (Gfortran incorrectly creates a copy of an array passed to an...
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 19 May 2019 11:26:20 +0000 (11:26 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 19 May 2019 11:26:20 +0000 (11:26 +0000)
2019-05-19  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/78290
* gfortran.dg/pr78290.f90: New test.

From-SVN: r271379

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr78290.f90 [new file with mode: 0644]

index 4dad098a76f76e6219e0eba9f64f87487891bbe1..1352e61c9f427e54f146536bbe6d1a29eef816b1 100644 (file)
@@ -1,3 +1,8 @@
+2019-05-19  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/78290
+       * gfortran.dg/pr78290.f90: New test.
+
 2019-05-19  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/88821
diff --git a/gcc/testsuite/gfortran.dg/pr78290.f90 b/gcc/testsuite/gfortran.dg/pr78290.f90
new file mode 100644 (file)
index 0000000..fe0e319
--- /dev/null
@@ -0,0 +1,35 @@
+! { dg-do run }
+! PR 78290 - used to give an ICE (with VOLATILE) and wrong
+! code without it.
+! Original test case by Andy Bennet.
+PROGRAM main
+  IMPLICIT NONE
+  INTEGER,PARAMETER::KI=4
+
+  TYPE mytype
+    INTEGER(KIND=KI)::i=1_KI
+  END TYPE mytype
+
+  TYPE(mytype),    DIMENSION(9),TARGET, SAVE::ta
+  INTEGER(KIND=KI),DIMENSION(3),TARGET, SAVE::ia    = 3_KI
+  INTEGER(KIND=KI),DIMENSION(:),POINTER     ::ia2   =>NULL()
+  INTEGER(KIND=KI),DIMENSION(:),POINTER     ::ip    =>NULL()
+ volatile::ip
+  ALLOCATE(ia2(5)); ia2=2_KI
+  ip=>ia
+  if (size(ip) /= 3) stop 1
+  CALL sub1(ip)
+  if (size(ip) /= 5) stop 2
+  if (any(ia /= [3,3,3])) stop 3
+  if (any (ip /= [2,2,2,2,2])) stop 4
+
+  ip=>ta%i
+
+CONTAINS
+
+  SUBROUTINE sub1(ipa)
+    INTEGER(KIND=KI),DIMENSION(:),POINTER::ipa
+    ipa => ia2
+  END SUBROUTINE sub1
+
+END PROGRAM main