diff options
author | Tobias Burnus <burnus@net-b.de> | 2011-12-08 19:54:27 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2011-12-08 19:54:27 +0100 |
commit | 14dcdf69d57b85cc5926162da7699f4846bb3faf (patch) | |
tree | 4705adde20a38543793f0e0d474f4e088e2a192c /gcc | |
parent | e48cc3915567359131c25e8453182150d4a66b56 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/io_real_boz_3.f90 | 34 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/io_real_boz_4.f90 | 15 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/io_real_boz_5.f90 | 13 |
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 |