[flang-commits] [flang] [Flang] Fix wrong compile-time error message, issue #178494. (PR #183878)

Eugene Epshteyn via flang-commits flang-commits at lists.llvm.org
Wed Mar 4 14:56:26 PST 2026


https://github.com/eugeneepshteyn updated https://github.com/llvm/llvm-project/pull/183878

>From c698a10affec11c42cd7568d39c419b506eaf1c8 Mon Sep 17 00:00:00 2001
From: Shandong Lao <shandong.lao at hpe.com>
Date: Fri, 27 Feb 2026 19:45:03 -0600
Subject: [PATCH 1/3] [Flang] Fix wrong compile-time error message, issue
 #178494.

---
 flang/lib/Parser/io-parsers.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/flang/lib/Parser/io-parsers.cpp b/flang/lib/Parser/io-parsers.cpp
index cb3e68a05c94d..c44f8ed9b548d 100644
--- a/flang/lib/Parser/io-parsers.cpp
+++ b/flang/lib/Parser/io-parsers.cpp
@@ -552,6 +552,11 @@ TYPE_PARSER(construct<format::FormatItem>(
     construct<format::FormatItem>(
         maybe(repeat), Parser<format::DerivedTypeDataEditDesc>{}) ||
     construct<format::FormatItem>(Parser<format::ControlEditDesc>{}) ||
+    // Error recovery: accept [r] before control-edit-desc so that the
+    // format validator can diagnose a repeat specifier before descriptors
+    // like SS, SP, S, BN, BZ, etc., rather than failing the parse entirely.
+    construct<format::FormatItem>(
+        maybe(repeat), Parser<format::ControlEditDesc>{}) ||
     construct<format::FormatItem>(charStringEditDesc) ||
     construct<format::FormatItem>(maybe(repeat), parenthesized(formatItems)))
 

>From 42717eafcf674094a99d76869497a56154feebcb Mon Sep 17 00:00:00 2001
From: Shandong Lao <shandong.lao at hpe.com>
Date: Mon, 2 Mar 2026 04:45:50 -0600
Subject: [PATCH 2/3] [Flang] add compile time test.

---
 flang/test/Semantics/io17.f90 | 45 +++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 flang/test/Semantics/io17.f90

diff --git a/flang/test/Semantics/io17.f90 b/flang/test/Semantics/io17.f90
new file mode 100644
index 0000000000000..dc05b54eda8b0
--- /dev/null
+++ b/flang/test/Semantics/io17.f90
@@ -0,0 +1,45 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1
+! Test error messages for repeat specifier before control edit descriptors
+! in FORMAT statements (not just in inline format strings).
+
+  ! Repeat specifier before sign-edit-desc in WRITE format strings
+  !ERROR: Repeat specifier before 'SS' edit descriptor
+  write(*,'(2SS, F10.3)') 0.5
+  !ERROR: Repeat specifier before 'SP' edit descriptor
+  write(*,'(2SP, F10.3)') 0.5
+  !ERROR: Repeat specifier before 'S' edit descriptor
+  write(*,'(2S, F10.3)') 0.5
+
+  ! Repeat specifier before blank-interp-edit-desc in WRITE format strings
+  !ERROR: Repeat specifier before 'BN' edit descriptor
+  write(*,'(2BN, F10.3)') 0.5
+  !ERROR: Repeat specifier before 'BZ' edit descriptor
+  write(*,'(2BZ, F10.3)') 0.5
+
+  ! Repeat specifier before sign-edit-desc in FORMAT statements
+  !ERROR: Repeat specifier before 'SS' edit descriptor
+2001 format(2SS, F10.3)
+  !ERROR: Repeat specifier before 'SP' edit descriptor
+2002 format(2SP, F10.3)
+  !ERROR: Repeat specifier before 'S' edit descriptor
+2003 format(2S, F10.3)
+
+  ! Repeat specifier before blank-interp-edit-desc in FORMAT statements
+  !ERROR: Repeat specifier before 'BN' edit descriptor
+2004 format(2BN, F10.3)
+  !ERROR: Repeat specifier before 'BZ' edit descriptor
+2005 format(2BZ, F10.3)
+
+  ! Repeat specifier before round-edit-desc in FORMAT statements
+  !ERROR: Repeat specifier before 'RU' edit descriptor
+2006 format(2RU, F10.3)
+  !ERROR: Repeat specifier before 'RZ' edit descriptor
+2007 format(2RZ, F10.3)
+
+  ! Repeat specifier before decimal-edit-desc in FORMAT statements
+  !ERROR: Repeat specifier before 'DC' edit descriptor
+2008 format(2DC, F10.3)
+  !ERROR: Repeat specifier before 'DP' edit descriptor
+2009 format(2DP, F10.3)
+
+  end

>From 9ae7c22b5fecdf17df8ee3b1b6cd4d3010b48f65 Mon Sep 17 00:00:00 2001
From: Shandong Lao <shandong.lao at hpe.com>
Date: Mon, 2 Mar 2026 16:49:54 -0600
Subject: [PATCH 3/3] [Flang] Enhance error message tests for repeat specifiers
 in various formats

---
 flang/test/Semantics/io17.f90 | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/flang/test/Semantics/io17.f90 b/flang/test/Semantics/io17.f90
index dc05b54eda8b0..3d4d52ba6b3c2 100644
--- a/flang/test/Semantics/io17.f90
+++ b/flang/test/Semantics/io17.f90
@@ -1,6 +1,9 @@
 ! RUN: %python %S/test_errors.py %s %flang_fc1
 ! Test error messages for repeat specifier before control edit descriptors
-! in FORMAT statements (not just in inline format strings).
+! in FORMAT statements, WRITE format strings, named constant formats,
+! and FMT= specifier.
+
+  character(*), parameter :: fmt1 = "(2SS, F10.3)"
 
   ! Repeat specifier before sign-edit-desc in WRITE format strings
   !ERROR: Repeat specifier before 'SS' edit descriptor
@@ -16,6 +19,14 @@
   !ERROR: Repeat specifier before 'BZ' edit descriptor
   write(*,'(2BZ, F10.3)') 0.5
 
+  ! Repeat specifier in named constant format
+  !ERROR: Repeat specifier before 'SS' edit descriptor
+  write(*,fmt1) 0.5
+
+  ! Repeat specifier in FMT= specifier
+  !ERROR: Repeat specifier before 'SS' edit descriptor
+  write(*,fmt="(2SS, F10.3)") 0.5
+
   ! Repeat specifier before sign-edit-desc in FORMAT statements
   !ERROR: Repeat specifier before 'SS' edit descriptor
 2001 format(2SS, F10.3)



More information about the flang-commits mailing list