OSDN Git Service

2006-10-28 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 28 Oct 2006 21:07:19 +0000 (21:07 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 28 Oct 2006 21:07:19 +0000 (21:07 +0000)
PR fortran/29625
* gfortran.dg/io_real_boz.f90: Add.
* gfortran.dg/io_real_boz2.f90: Add.

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

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

index e2096ba..e93c338 100644 (file)
@@ -1,3 +1,9 @@
+2006-10-28 Tobias Burnus <burnus@net-b.de>
+
+       PR fortran/29625
+       * gfortran.dg/io_real_boz.f90: Add.
+       * gfortran.dg/io_real_boz2.f90: Add.
+
 2006-10-28  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/26899
diff --git a/gcc/testsuite/gfortran.dg/io_real_boz.f90 b/gcc/testsuite/gfortran.dg/io_real_boz.f90
new file mode 100644 (file)
index 0000000..d5b0cb6
--- /dev/null
@@ -0,0 +1,66 @@
+! { dg-do run }
+! Test reading/writing of integer, real and character BOZ
+! non-integer BOZ are not valid in standard Fortran, however.
+! PR fortran/29625
+program real_boz
+  implicit none
+  integer(4)        :: i,i2
+  real(4)           :: r,r2
+  complex(4)        :: z,z2
+  character         :: c,c2
+  character(len=100) :: str,fmt
+
+  i = 43
+  r = 325.56
+  z = cmplx(14.456, 345342.456)
+  c ='g'
+
+  write(str,'(b0)') i
+  write(fmt,'(a,i0,a)') '(b',len_trim(str),')'
+  read(str,fmt) i2
+  if(i /= i2) call abort()
+
+  write(str,'(o0)') i
+  write(fmt,'(a,i0,a)') '(o',len_trim(str),')'
+  read(str,fmt) i2
+  if(i /= i2) call abort()
+
+  write(str,'(z0)') i
+  write(fmt,'(a,i0,a)') '(z',len_trim(str),')'
+  read(str,fmt) i2
+  if(i /= i2) call abort()
+
+
+  write(str,'(b0)') r
+  write(fmt,'(a,i0,a)') '(b',len_trim(str),')'
+  read(str,fmt) r2
+  if(r /= r2) call abort()
+  
+  write(str,'(o0)') r
+  write(fmt,'(a,i0,a)') '(o',len_trim(str),')'
+  read(str,fmt) r2
+  if(r /= r2) call abort()
+
+  write(str,'(z0)') r
+  write(fmt,'(a,i0,a)') '(z',len_trim(str),')'
+  read(str,fmt) r2
+  if(r /= r2) call abort()
+
+
+  write(str,'(b0)') c
+  write(fmt,'(a,i0,a)') '(b',len_trim(str),')'
+  read(str,fmt) c2
+  if(c /= c2) call abort()
+
+  write(str,'(o0)') c
+  write(fmt,'(a,i0,a)') '(o',len_trim(str),')'
+  read(str,fmt) c2
+  if(c /= c2) call abort()
+
+  write(str,'(z0)') c
+  write(fmt,'(a,i0,a)') '(z',len_trim(str),')'
+  read(str,fmt) c2
+  if(c /= c2) call abort()
+
+end program real_boz
+  
diff --git a/gcc/testsuite/gfortran.dg/io_real_boz2.f90 b/gcc/testsuite/gfortran.dg/io_real_boz2.f90
new file mode 100644 (file)
index 0000000..b62385f
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do run }
+! { dg-shouldfail "Real BOZ not allowed" }
+! { dg-options "-fall-intrinsics -std=f2003" }
+! Test for invalid (F95/F2003) writing of real with octal edit descriptor
+! PR fortran/29625
+program real_boz
+  implicit none
+  real(4)           :: r
+  character(len=100) :: str
+
+  r = 325.56
+  write(str,'(o0)') r
+end program real_boz
+! { dg-output "At line 12 .*" }
+! { dg-output "Expected INTEGER .* in formatted transfer, got REAL" }