aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2011-12-08 19:54:27 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2011-12-08 19:54:27 +0100
commit14dcdf69d57b85cc5926162da7699f4846bb3faf (patch)
tree4705adde20a38543793f0e0d474f4e088e2a192c /gcc
parente48cc3915567359131c25e8453182150d4a66b56 (diff)
downloadgcc-14dcdf69d57b85cc5926162da7699f4846bb3faf.zip
gcc-14dcdf69d57b85cc5926162da7699f4846bb3faf.tar.gz
gcc-14dcdf69d57b85cc5926162da7699f4846bb3faf.tar.bz2
re PR libfortran/51407 (Use of BOZ edit descriptors to edit real and complex data and F2008)
2011-12-08 Tobias Burnus <burnus@net-b.de> PR fortran/51407 * io/transfer.c (require_numeric_type): New function. (formatted_transfer_scalar_read, formatted_transfer_scalar_write): Use it, allow BOZ edit descriptors with F2008. 2011-12-08 Tobias Burnus <burnus@net-b.de> PR fortran/51407 * gfortran.dg/io_real_boz_3.f90: New. * gfortran.dg/io_real_boz_4.f90: New. * gfortran.dg/io_real_boz_5.f90: New. From-SVN: r182132
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gfortran.dg/io_real_boz_3.f9034
-rw-r--r--gcc/testsuite/gfortran.dg/io_real_boz_4.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/io_real_boz_5.f9013
5 files changed, 77 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 7273681..602059f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,12 @@
2011-12-08 Tobias Burnus <burnus@net-b.de>
+ PR fortran/51407
+ * io/transfer.c (require_numeric_type): New function.
+ (formatted_transfer_scalar_read, formatted_transfer_scalar_write):
+ Use it, allow BOZ edit descriptors with F2008.
+
+2011-12-08 Tobias Burnus <burnus@net-b.de>
+
PR fortran/51448
* fortran/trans-array.c (get_std_lbound): Fix handling of
conversion functions.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 66645cd..9eef856 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,11 @@
-2011-12-07 Tobias Burnus <burnus@net-b.de>
+2011-12-08 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/51407
+ * gfortran.dg/io_real_boz_3.f90: New.
+ * gfortran.dg/io_real_boz_4.f90: New.
+ * gfortran.dg/io_real_boz_5.f90: New.
+
+2011-12-08 Tobias Burnus <burnus@net-b.de>
PR fortran/51448
* gfortran.dg/realloc_on_assign_8.f90: New.
diff --git a/gcc/testsuite/gfortran.dg/io_real_boz_3.f90 b/gcc/testsuite/gfortran.dg/io_real_boz_3.f90
new file mode 100644
index 0000000..8a6f096
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/io_real_boz_3.f90
@@ -0,0 +1,34 @@
+! { dg-do run }
+! { dg-options "-std=f2008" }
+!
+! PR fortran/51407
+!
+! Fortran 2008 allows BOZ edit descriptors for real/complex.
+!
+ real(kind=4) :: x
+ complex(kind=4) :: z
+ character(len=64) :: str1
+
+ x = 1.0_16 + 2.0_16**(-105)
+ z = cmplx (1.0, 2.0)
+
+ write (str1,'(b32)') x
+ read (str1,'(b32)') x
+ write (str1,'(o32)') x
+ read (str1,'(o32)') x
+ write (str1,'(z32)') x
+ read (str1,'(z32)') x
+ write (str1,'(b0)') x
+ write (str1,'(o0)') x
+ write (str1,'(z0)') x
+
+ write (str1,'(2b32)') z
+ read (str1,'(2b32)') z
+ write (str1,'(2o32)') z
+ read (str1,'(2o32)') z
+ write (str1,'(2z32)') z
+ read (str1,'(2z32)') z
+ write (str1,'(2b0)') z
+ write (str1,'(2o0)') z
+ write (str1,'(2z0)') z
+ end
diff --git a/gcc/testsuite/gfortran.dg/io_real_boz_4.f90 b/gcc/testsuite/gfortran.dg/io_real_boz_4.f90
new file mode 100644
index 0000000..b70555a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/io_real_boz_4.f90
@@ -0,0 +1,15 @@
+! { dg-do run }
+! { dg-options "-std=f2003" }
+!
+! PR fortran/51407
+!
+! Valid in F2008, but in F95/F2003:
+! { dg-output "Expected INTEGER for item 1 in formatted transfer, got REAL" }
+! { dg-shouldfail "Only F2003: BOZ edit with REAL" }
+!
+ real(kind=16) :: x
+ character(len=32) :: str1
+ x = 1.0_16 + 2.0_16**(-105)
+ write (str1,'(z32)') x
+ write (str1,'(z0)') x
+ end
diff --git a/gcc/testsuite/gfortran.dg/io_real_boz_5.f90 b/gcc/testsuite/gfortran.dg/io_real_boz_5.f90
new file mode 100644
index 0000000..6a36ee5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/io_real_boz_5.f90
@@ -0,0 +1,13 @@
+! { dg-do run }
+! { dg-options "-std=f2008" }
+!
+! PR fortran/51407
+!
+! Invalid in F2008 (accepted with -std=gnu)
+! { dg-output "Expected numeric type for item 1 in formatted transfer, got CHARACTER" }
+! { dg-shouldfail "Character type in BOZ" }
+!
+ character(len=32) :: str1
+ x = 1.0_16 + 2.0_16**(-105)
+ write (str1,'(z0)') 'X'
+ end