Please find attached a patch for PR96436.
OK to commit?
[PATCH] Fortran : rejected f0.d edit descriptor PR96436
Zero length f format descriptors are valid for Fortran 95 and
later. For g format descriptors from Fortran 2008 and later.
Finally for D, E, EN and ES for Fortran 2018 and later.
2020-08-10 Mark Eggleston
libgfortran/io/
PR fortran/96436
* format.c (parse_format_list): Add new local variable
"standard" to hold the required standard to check. If the
format width is zero select standard depending on descriptor.
Call notification_std using the new standard variable.
2020-08-10 Mark Eggleston
gcc/testsuite/
PR fortran/96436
* gfortran.dg/pr96436_1.f90
* gfortran.dg/pr96436_2.f90
* gfortran.dg/pr96436_3.f90
* gfortran.dg/pr96436_4.f90
* gfortran.dg/pr96436_5.f90
* gfortran.dg/pr96436_6.f90
* gfortran.dg/pr96436_7.f90
* gfortran.dg/pr96436_8.f90
* gfortran.dg/pr96436_9.f90
* gfortran.dg/pr96436_10.f90
--
https://www.codethink.co.uk/privacy.html
>From 9f60ccd71e0c675b48d6614141d1aeddaa863191 Mon Sep 17 00:00:00 2001
From: Mark Eggleston
Date: Tue, 4 Aug 2020 14:10:08 +0100
Subject: [PATCH] Fortran : rejected f0.d edit descriptor PR96436
Zero length f format descriptors are valid for Fortran 95 and
later. For g format descriptors from Fortran 2008 and later.
Finally for D, E, EN and ES for Fortran 2018 and later.
2020-08-10 Mark Eggleston
libgfortran/io/
PR fortran/96436
* format.c (parse_format_list): Add new local variable
"standard" to hold the required standard to check. If the
format width is zero select standard depending on descriptor.
Call notification_std using the new standard variable.
2020-08-10 Mark Eggleston
gcc/testsuite/
PR fortran/96436
* gfortran.dg/pr96436_1.f90
* gfortran.dg/pr96436_2.f90
* gfortran.dg/pr96436_3.f90
* gfortran.dg/pr96436_4.f90
* gfortran.dg/pr96436_5.f90
* gfortran.dg/pr96436_6.f90
* gfortran.dg/pr96436_7.f90
* gfortran.dg/pr96436_8.f90
* gfortran.dg/pr96436_9.f90
* gfortran.dg/pr96436_10.f90
---
gcc/testsuite/gfortran.dg/pr96436_1.f90 | 10 ++
gcc/testsuite/gfortran.dg/pr96436_10.f90 | 10 ++
gcc/testsuite/gfortran.dg/pr96436_2.f90 | 10 ++
gcc/testsuite/gfortran.dg/pr96436_3.f90 | 13 +
gcc/testsuite/gfortran.dg/pr96436_4.f90 | 25 +
gcc/testsuite/gfortran.dg/pr96436_5.f90 | 25 +
gcc/testsuite/gfortran.dg/pr96436_6.f90 | 10 ++
gcc/testsuite/gfortran.dg/pr96436_7.f90 | 10 ++
gcc/testsuite/gfortran.dg/pr96436_8.f90 | 10 ++
gcc/testsuite/gfortran.dg/pr96436_9.f90 | 10 ++
libgfortran/io/format.c | 10 +-
11 files changed, 142 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_1.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_10.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_2.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_3.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_4.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_5.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_6.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_7.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_8.f90
create mode 100644 gcc/testsuite/gfortran.dg/pr96436_9.f90
diff --git a/gcc/testsuite/gfortran.dg/pr96436_1.f90 b/gcc/testsuite/gfortran.dg/pr96436_1.f90
new file mode 100644
index 000..7cc6a0a69b1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr96436_1.f90
@@ -0,0 +1,10 @@
+! { dg-do run }
+! { dg-options "-std=f95 -pedantic" }
+
+character(20) :: fmt
+character(9) :: buffer
+fmt = "(1a1,f0.2,1a1)"
+write(buffer,fmt) ">", 3.0, "<"
+if (buffer.ne.">3.00<") stop 1
+end
+
diff --git a/gcc/testsuite/gfortran.dg/pr96436_10.f90 b/gcc/testsuite/gfortran.dg/pr96436_10.f90
new file mode 100644
index 000..3bd30a9f16b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr96436_10.f90
@@ -0,0 +1,10 @@
+! { dg-do run }
+! { dg-options "-std=f2008 -pedantic" }
+! { dg-shouldfail "Zero width in format descriptor" }
+
+character(10) :: fmt = "(es0.2)"
+print fmt, 3.
+end
+
+! { dg-output "Fortran runtime error: Zero width in format descriptor" }
+
diff --git a/gcc/testsuite/gfortran.dg/pr96436_2.f90 b/gcc/testsuite/gfortran.dg/pr96436_2.f90
new file mode 100644
index 000..d2d6caffbfe
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr96436_2.f90
@@ -0,0 +1,10 @@
+! { dg-do run }
+! { dg-options "-std=f2003 -pedantic" }
+
+character(20) :: fmt
+character(9) :: buffer
+fmt = "(1a1,f0.2,1a1)"
+write(buffer,fmt) ">", 3.0, "<"
+if (buffer.ne.">3.00<") stop 1
+end
+
diff --git a/gcc/testsuite/gfortran.dg/pr96436_3.f90 b/gcc/testsuite/gfortr