[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