2008-01-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 6 Jan 2008 18:34:14 +0000 (18:34 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 6 Jan 2008 18:34:14 +0000 (18:34 +0000)
PR libfortran/34540
* gfortran.dg/optional_dim_3.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131357 138bc75d-0d04-0410-961f-82ee72b054a4

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

index f59e8aa..e0c4266 100644 (file)
@@ -1,4 +1,9 @@
-2007-01-06  Tobias Burnus  <burnus@net-b.de>
+2008-01-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/34540
+       * gfortran.dg/optional_dim_3.f90: New test.
+
+2008-01-06  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/34658
        * gfortran.dg/common_11.f90: New.
diff --git a/gcc/testsuite/gfortran.dg/optional_dim_3.f90 b/gcc/testsuite/gfortran.dg/optional_dim_3.f90
new file mode 100644 (file)
index 0000000..fc66ba5
--- /dev/null
@@ -0,0 +1,52 @@
+! { dg-do run }
+! PR34540 cshift, eoshift, kind=1 and kind=2 arguments.
+! Test case thanks to Thomas Koenig.
+module tst_foo
+  implicit none
+contains
+  subroutine tst_optional(a,n1,n2)
+    integer(kind=1), intent(in), optional:: n1
+    integer(kind=2), intent(in), optional:: n2
+    integer(kind=1), dimension(2) :: s1
+    character(64) :: testbuf
+    real, dimension(:,:) :: a
+    s1 = (/1, 1/)
+    write(testbuf,'(4F10.2)') cshift(a, shift=s1)
+    if (testbuf /= "      2.00      1.00      4.00      3.00") CALL abort
+    write(testbuf,'(4F10.2)') cshift(a,shift=s1,dim=n2)
+    if (testbuf /= "      2.00      1.00      4.00      3.00") CALL abort
+    write(testbuf,'(4F10.2)') eoshift(a,shift=s1,dim=n1)
+    if (testbuf /= "      2.00      0.00      4.00      0.00") CALL abort
+    write(testbuf,'(4F10.2)') eoshift(a,shift=s1,dim=n2)
+    if (testbuf /= "      2.00      0.00      4.00      0.00") CALL abort
+  end subroutine tst_optional
+ subroutine sub(bound, dimmy)
+   integer(kind=8), optional :: dimmy
+   logical, optional :: bound
+   logical :: lotto(4)
+   character(20) :: testbuf
+   lotto = .false.
+   lotto = cshift((/.true.,.false.,.true.,.false./),1,dim=dimmy)
+   write(testbuf,*) lotto
+   if (trim(testbuf).ne." F T F T") call abort
+   lotto = .false.
+   lotto = eoshift((/.true.,.true.,.true.,.true./),1,boundary=bound,dim=dimmy)
+   lotto = eoshift(lotto,1,dim=dimmy)
+   write(testbuf,*) lotto
+   if (trim(testbuf).ne." T T F F") call abort
+ end subroutine
+end module tst_foo
+
+program main
+  use tst_foo
+  implicit none
+  real, dimension(2,2) :: r
+  integer(kind=1) :: d1
+  integer(kind=2) :: d2
+  data r /1.0, 2.0, 3.0, 4.0/
+  d1 = 1_1
+  d2 = 1_2
+  call tst_optional(r,d1, d2)
+  call sub(bound=.false., dimmy=1_8)
+  call sub()
+end program main