diff --git a/flang/include/flang/Common/format.h b/flang/include/flang/Common/format.h --- a/flang/include/flang/Common/format.h +++ b/flang/include/flang/Common/format.h @@ -471,7 +471,7 @@ 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 --- a/flang/lib/Parser/io-parsers.cpp +++ b/flang/lib/Parser/io-parsers.cpp @@ -601,28 +601,26 @@ "A " >> pure(format::IntrinsicTypeDataEditDesc::Kind::A), maybe(width), noInt, noInt) || // PGI/Intel extension: omitting width (and all else that follows) - extension( - "nonstandard usage: abbreviated edit descriptor"_port_en_US, - construct( - "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(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