From cf406a6c79ce404c45f99bcf2df3293269dbb462 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Mon, 9 Dec 2024 20:11:23 -0800 Subject: 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. --- gcc/testsuite/gfortran.dg/pr117819.f90 | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pr117819.f90 (limited to 'gcc') 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 -- cgit v1.1