[flang-commits] [flang] [Flang] Fix wrong compile-time error message, issue #178494. (PR #183878)
via flang-commits
flang-commits at lists.llvm.org
Mon Mar 2 02:46:41 PST 2026
https://github.com/laoshd 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/2] [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/2] [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
More information about the flang-commits
mailing list