From add995ec117d756e61d207041cd32f937c1a1cd9 Mon Sep 17 00:00:00 2001
From: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date: Sun, 7 Jan 2024 10:22:19 -0800
Subject: [PATCH] libgfortran: Emit a space at beginning of internal unit NML.

PR libgfortran/113223

libgfortran/ChangeLog:

	* io/write.c (namelist_write): If internal_unit precede with space.

gcc/testsuite/ChangeLog:

	* gfortran.dg/dtio_25.f90: Update.
	* gfortran.dg/namelist_57.f90: Update.
	* gfortran.dg/namelist_65.f90: Update.
---
 gcc/testsuite/gfortran.dg/dtio_25.f90     | 2 +-
 gcc/testsuite/gfortran.dg/namelist_57.f90 | 2 +-
 gcc/testsuite/gfortran.dg/namelist_65.f90 | 2 +-
 libgfortran/io/write.c                    | 2 ++
 4 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/gcc/testsuite/gfortran.dg/dtio_25.f90 b/gcc/testsuite/gfortran.dg/dtio_25.f90
index 8ca084899de7..1de7dc0bd943 100644
--- a/gcc/testsuite/gfortran.dg/dtio_25.f90
+++ b/gcc/testsuite/gfortran.dg/dtio_25.f90
@@ -50,7 +50,7 @@ program p
   namelist /nml/ x
   x = t('a', 5)
   write (buffer, nml)
-  if (buffer.ne.'&NML  X=a,  5  /') STOP 1
+  if (buffer.ne.' &NML  X=a,  5  /') STOP 1
   x = t('x', 0)
   read (buffer, nml)
   if (x%c.ne.'a'.or. x%k.ne.5) STOP 2
diff --git a/gcc/testsuite/gfortran.dg/namelist_57.f90 b/gcc/testsuite/gfortran.dg/namelist_57.f90
index a72b866d575f..8f4c4ed14788 100644
--- a/gcc/testsuite/gfortran.dg/namelist_57.f90
+++ b/gcc/testsuite/gfortran.dg/namelist_57.f90
@@ -6,7 +6,7 @@
   n = 123
   line = ""
   write(line,nml=stuff)
-  if (line(1) .ne. "&STUFF") STOP 1
+  if (line(1) .ne. " &STUFF") STOP 1
   if (line(2) .ne. " N=123        ,") STOP 2
   if (line(3) .ne. " /") STOP 3
   end 
diff --git a/gcc/testsuite/gfortran.dg/namelist_65.f90 b/gcc/testsuite/gfortran.dg/namelist_65.f90
index 2ca67f2d43f9..424c72295900 100644
--- a/gcc/testsuite/gfortran.dg/namelist_65.f90
+++ b/gcc/testsuite/gfortran.dg/namelist_65.f90
@@ -13,7 +13,7 @@ do i=1,len(out)
 enddo
 
 write(out,nl1)
-if (out(1).ne."&NL1") STOP 1
+if (out(1).ne." &NL1") STOP 1
 if (out(2).ne." A=  1.00000000    ,") STOP 2
 if (out(3).ne." B=  2.00000000    ,") STOP 3
 if (out(4).ne." C=  3.00000000    ,") STOP 4
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index a0401fed4e08..49beaee4724e 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -2466,6 +2466,8 @@ namelist_write (st_parameter_dt *dtp)
 	dtp->u.p.nml_delim = '\0';
     }
 
+  if (is_internal_unit (dtp))
+    write_character (dtp, " ", 1, 1, NODELIM);
   write_character (dtp, "&", 1, 1, NODELIM);
 
   /* Write namelist name in upper case - f95 std.  */
-- 
GitLab