]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libfortran: G formatting for UNSIGNED [PR118536]
authorHarald Anlauf <anlauf@gmx.de>
Fri, 17 Jan 2025 20:20:31 +0000 (21:20 +0100)
committerHarald Anlauf <anlauf@gmx.de>
Fri, 17 Jan 2025 21:38:41 +0000 (22:38 +0100)
PR libfortran/118536

libgfortran/ChangeLog:

* io/transfer.c (formatted_transfer_scalar_write): Handle UNSIGNED
in G formatting.

gcc/testsuite/ChangeLog:

* gfortran.dg/unsigned_write_2.f90: New test.

gcc/testsuite/gfortran.dg/unsigned_write_2.f90 [new file with mode: 0644]
libgfortran/io/transfer.c

diff --git a/gcc/testsuite/gfortran.dg/unsigned_write_2.f90 b/gcc/testsuite/gfortran.dg/unsigned_write_2.f90
new file mode 100644 (file)
index 0000000..091e9b9
--- /dev/null
@@ -0,0 +1,30 @@
+! { dg-do  run }
+! This is a libgfortran (runtime library) test, need to run only once!
+!
+! { dg-additional-options "-funsigned" }
+!
+! PR libfortran/118536 - G formatting for UNSIGNED
+
+program print_unsigned_g_formatted
+  character(21) :: s1, s2
+  unsigned(1)  :: u1 = huge(0U_1)
+  unsigned(2)  :: u2 = huge(0U_2)
+  unsigned(4)  :: u4 = huge(0U_4)
+  unsigned(8)  :: u8 = huge(0U_8)
+
+  write(s1,'(i0)') u1
+  write(s2,'(g0)') u1
+  if (s1 /= s2) stop 1
+
+  write(s1,'(i0)') u2
+  write(s2,'(g0)') u2
+  if (s1 /= s2) stop 2
+
+  write(s1,'(i0)') u4
+  write(s2,'(g0)') u4
+  if (s1 /= s2) stop 3
+
+  write(s1,'(i0)') u8
+  write(s2,'(g0)') u8
+  if (s1 /= s2) stop 4
+end
index 0177e052062895cbdce03de4265e8ae5bd91a395..b3b72f39c5b1fd050cd608137afd6cc381b98465 100644 (file)
@@ -2365,6 +2365,9 @@ formatted_transfer_scalar_write (st_parameter_dt *dtp, bt type, void *p, int kin
              case BT_INTEGER:
                write_i (dtp, f, p, kind);
                break;
+             case BT_UNSIGNED:
+               write_iu (dtp, f, p, kind);
+               break;
              case BT_LOGICAL:
                write_l (dtp, f, p, kind);
                break;