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

via flang-commits flang-commits at lists.llvm.org
Thu Mar 5 03:06:24 PST 2026


Author: laoshd
Date: 2026-03-05T06:06:19-05:00
New Revision: 2f90df0399b759525fcbd13283e37e2cdfb9bd4e

URL: https://github.com/llvm/llvm-project/commit/2f90df0399b759525fcbd13283e37e2cdfb9bd4e
DIFF: https://github.com/llvm/llvm-project/commit/2f90df0399b759525fcbd13283e37e2cdfb9bd4e.diff

LOG:  [Flang] Fix wrong compile-time error message, issue #178494. (#183878)

Fix the problem described in issue #178494. It will cover the failures
with S, SP, SS, BN, BZ, LZ, LZP, LZS, etc. It will resolve the test
failures in PR #183500.

Added: 
    flang/test/Semantics/io17.f90

Modified: 
    flang/lib/Parser/io-parsers.cpp

Removed: 
    


################################################################################
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)))
 

diff  --git a/flang/test/Semantics/io17.f90 b/flang/test/Semantics/io17.f90
new file mode 100644
index 0000000000000..3d4d52ba6b3c2
--- /dev/null
+++ b/flang/test/Semantics/io17.f90
@@ -0,0 +1,56 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1
+! Test error messages for repeat specifier before control edit descriptors
+! 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
+  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 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)
+  !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