From: peter klausler Date: Wed, 22 Jul 2020 23:56:37 +0000 (-0700) Subject: [flang] Allow omission of comma in FORMAT(1PE5.2) in runtime X-Git-Tag: llvmorg-13-init~16651 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e57464151d4c4912a7ec4d6fd0920056b2f75c7c;p=platform%2Fupstream%2Fllvm.git [flang] Allow omission of comma in FORMAT(1PE5.2) in runtime A comma is not required between a scale factor and a following data edit descriptor (C1302). Reviewed By: PeteSteinfeld Differential Revision: https://reviews.llvm.org/D84369 --- diff --git a/flang/runtime/format-implementation.h b/flang/runtime/format-implementation.h index a4453cd..ad8bbcb 100644 --- a/flang/runtime/format-implementation.h +++ b/flang/runtime/format-implementation.h @@ -330,11 +330,13 @@ int FormatControl::CueUpNextDataEdit(Context &context, bool stop) { offset_ += *repeat; } else if (ch >= 'A' && ch <= 'Z') { int start{offset_ - 1}; - CharType next{Capitalize(PeekNext())}; - if (next >= 'A' && next <= 'Z') { - ++offset_; - } else { - next = '\0'; + CharType next{'\0'}; + if (ch != 'P') { // 1PE5.2 - comma not required (C1302) + CharType peek{Capitalize(PeekNext())}; + if (peek >= 'A' && peek <= 'Z') { + next = peek; + ++offset_; + } } if (ch == 'E' || (!next && diff --git a/flang/unittests/Runtime/hello.cpp b/flang/unittests/Runtime/hello.cpp index f6db4a8..c38aedf 100644 --- a/flang/unittests/Runtime/hello.cpp +++ b/flang/unittests/Runtime/hello.cpp @@ -175,6 +175,7 @@ int main() { {"(E32.17E0,';')", " 0.00000000000000000E+0;"}, {"(G32.17E0,';')", " 0.0000000000000000 ;"}, {"(1P,E32.17,';')", " 0.00000000000000000E+00;"}, + {"(1PE32.17,';')", " 0.00000000000000000E+00;"}, // no comma {"(1P,F32.17,';')", " 0.00000000000000000;"}, {"(1P,G32.17,';')", " 0.0000000000000000 ;"}, {"(2P,E32.17,';')", " 00.0000000000000000E+00;"}, @@ -195,6 +196,7 @@ int main() { {"(E32.17E4,';')", " 0.10000000000000000E+0001;"}, {"(G32.17E4,';')", " 1.0000000000000000 ;"}, {"(1P,E32.17,';')", " 1.00000000000000000E+00;"}, + {"(1PE32.17,';')", " 1.00000000000000000E+00;"}, // no comma {"(1P,F32.17,';')", " 0.10000000000000000;"}, {"(1P,G32.17,';')", " 1.0000000000000000 ;"}, {"(ES32.17,';')", " 1.00000000000000000E+00;"},