[flang-commits] [flang] cfa032c - [flang] Emit just one warning for a bad format edit descriptor

Peter Klausler via flang-commits flang-commits at lists.llvm.org
Fri Jul 21 15:17:16 PDT 2023


Author: Peter Klausler
Date: 2023-07-21T15:16:59-07:00
New Revision: cfa032cea0a165ad803fbfdd17e805052e2f3640

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

LOG: [flang] Emit just one warning for a bad format edit descriptor

An attempt to use an edit descriptor (other than A or L) in a FORMAT
statement without arequired 'w' width will elicit warnings from both
the parser and the I/O checker in semantics.  Remove the warning from
the parser.

Differential Revision: https://reviews.llvm.org/D155977

Added: 
    

Modified: 
    flang/include/flang/Common/format.h
    flang/lib/Parser/io-parsers.cpp

Removed: 
    


################################################################################
diff  --git a/flang/include/flang/Common/format.h b/flang/include/flang/Common/format.h
index 0137da53bd0907..2374ff6983cf41 100644
--- a/flang/include/flang/Common/format.h
+++ b/flang/include/flang/Common/format.h
@@ -471,7 +471,7 @@ template <typename CHAR> bool FormatValidator<CHAR>::check_w() {
     NextToken();
     return true;
   }
-  if (*argString_ != 'A') {
+  if (*argString_ != 'A' && *argString_ != 'L') {
     ReportWarning("Expected '%s' edit descriptor 'w' value"); // C1306
   }
   return false;

diff  --git a/flang/lib/Parser/io-parsers.cpp b/flang/lib/Parser/io-parsers.cpp
index 8c082810d8a465..ca0dbedc8da427 100644
--- a/flang/lib/Parser/io-parsers.cpp
+++ b/flang/lib/Parser/io-parsers.cpp
@@ -601,28 +601,26 @@ TYPE_PARSER(construct<format::IntrinsicTypeDataEditDesc>(
         "A " >> pure(format::IntrinsicTypeDataEditDesc::Kind::A), maybe(width),
         noInt, noInt) ||
     // PGI/Intel extension: omitting width (and all else that follows)
-    extension<LanguageFeature::AbbreviatedEditDescriptor>(
-        "nonstandard usage: abbreviated edit descriptor"_port_en_US,
-        construct<format::IntrinsicTypeDataEditDesc>(
-            "I " >> pure(format::IntrinsicTypeDataEditDesc::Kind::I) ||
-                ("B "_tok / !letter /* don't occlude BN & BZ */) >>
-                    pure(format::IntrinsicTypeDataEditDesc::Kind::B) ||
-                "O " >> pure(format::IntrinsicTypeDataEditDesc::Kind::O) ||
-                "Z " >> pure(format::IntrinsicTypeDataEditDesc::Kind::Z) ||
-                "F " >> pure(format::IntrinsicTypeDataEditDesc::Kind::F) ||
-                ("D "_tok / !letter /* don't occlude DT, DC, & DP */) >>
-                    pure(format::IntrinsicTypeDataEditDesc::Kind::D) ||
-                "E " >>
-                    ("N " >>
-                            pure(format::IntrinsicTypeDataEditDesc::Kind::EN) ||
-                        "S " >>
-                            pure(format::IntrinsicTypeDataEditDesc::Kind::ES) ||
-                        "X " >>
-                            pure(format::IntrinsicTypeDataEditDesc::Kind::EX) ||
-                        pure(format::IntrinsicTypeDataEditDesc::Kind::E)) ||
-                "G " >> pure(format::IntrinsicTypeDataEditDesc::Kind::G) ||
-                "L " >> pure(format::IntrinsicTypeDataEditDesc::Kind::L),
-            noInt, noInt, noInt)))
+    // Parse them just to get them to the I/O checker in semantics;
+    // they are not supported by the runtime.
+    extension<LanguageFeature::AbbreviatedEditDescriptor>(construct<
+        format::IntrinsicTypeDataEditDesc>(
+        "I " >> pure(format::IntrinsicTypeDataEditDesc::Kind::I) ||
+            ("B "_tok / !letter /* don't occlude BN & BZ */) >>
+                pure(format::IntrinsicTypeDataEditDesc::Kind::B) ||
+            "O " >> pure(format::IntrinsicTypeDataEditDesc::Kind::O) ||
+            "Z " >> pure(format::IntrinsicTypeDataEditDesc::Kind::Z) ||
+            "F " >> pure(format::IntrinsicTypeDataEditDesc::Kind::F) ||
+            ("D "_tok / !letter /* don't occlude DT, DC, & DP */) >>
+                pure(format::IntrinsicTypeDataEditDesc::Kind::D) ||
+            "E " >>
+                ("N " >> pure(format::IntrinsicTypeDataEditDesc::Kind::EN) ||
+                    "S " >> pure(format::IntrinsicTypeDataEditDesc::Kind::ES) ||
+                    "X " >> pure(format::IntrinsicTypeDataEditDesc::Kind::EX) ||
+                    pure(format::IntrinsicTypeDataEditDesc::Kind::E)) ||
+            "G " >> pure(format::IntrinsicTypeDataEditDesc::Kind::G) ||
+            "L " >> pure(format::IntrinsicTypeDataEditDesc::Kind::L),
+        noInt, noInt, noInt)))
 
 // R1307 data-edit-desc (part 2 of 2)
 // R1312 v -> [sign] digit-string


        


More information about the flang-commits mailing list