diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2024-12-09 20:11:23 -0800 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2024-12-10 09:28:25 -0800 |
commit | cf406a6c79ce404c45f99bcf2df3293269dbb462 (patch) | |
tree | f7fe1bf4a227c7151fc478d93b2792703780b66c /gcc | |
parent | d26c166001d6a5bdfd94be6e6d17135669ed340b (diff) | |
download | gcc-cf406a6c79ce404c45f99bcf2df3293269dbb462.zip gcc-cf406a6c79ce404c45f99bcf2df3293269dbb462.tar.gz gcc-cf406a6c79ce404c45f99bcf2df3293269dbb462.tar.bz2 |
Fortran: Fix READ with padding in BLANK ZERO mode.
PR fortran/117819
libgfortran/ChangeLog:
* io/read.c (read_decimal): If the read value is short of the
specified width and pad mode is PAD yes, check for BLANK ZERO
and adjust the value accordingly.
(read_decimal_unsigned): Likewise.
(read_radix): Likewise.
gcc/testsuite/ChangeLog:
* gfortran.dg/pr117819.f90: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr117819.f90 | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/pr117819.f90 b/gcc/testsuite/gfortran.dg/pr117819.f90 new file mode 100644 index 0000000..d9a9b7f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr117819.f90 @@ -0,0 +1,45 @@ +! { dg-do run } +! PR117819 +Program xe1 + Implicit None + Character(6) string + Integer x + Logical :: ok = .True. + string = '111111' + !print *, "String we read from is: ", string + Read(string,1) x +1 Format(BZ,B8) + If (x/=Int(b'11111100')) Then + Print *,'FAIL B8 BZ wrong result' + Print *,'Expected',Int(b'11111100') + Print *,'Received',x + ok = .False. + End If + string = '123456' + !print *, "String we read from is: ", string + Read(string,2) x +2 Format(BZ,I8) + If (x/=12345600) Then + Print *,'FAIL I8 BZ wrong result' + Print *,'Expected',12345600 + Print *,'Received',x + ok = .False. + End If + Read(string,3) x +3 Format(BZ,O8) + If (x/=Int(o'12345600')) Then + Print *,'FAIL O8 BZ wrong result' + Print *,'Expected',Int(o'12345600') + Print *,'Received',x + ok = .False. + End If + Read(string,4) x +4 Format(BZ,Z8) + If (x/=Int(z'12345600')) Then + Print *,'FAIL OZ BZ wrong result' + Print *,'Expected',Int(z'12345600') + Print *,'Received',x + ok = .False. + End If + If (.not. ok) stop 1 +End Program |