diff --git a/flang/runtime/format-implementation.h b/flang/runtime/format-implementation.h --- a/flang/runtime/format-implementation.h +++ b/flang/runtime/format-implementation.h @@ -330,11 +330,13 @@ 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 --- a/flang/unittests/Runtime/hello.cpp +++ b/flang/unittests/Runtime/hello.cpp @@ -175,6 +175,7 @@ {"(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 @@ {"(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;"},