diff --git a/flang/docs/Extensions.md b/flang/docs/Extensions.md index 5938ecc17c6c3..4646e0ba501b9 100644 --- a/flang/docs/Extensions.md +++ b/flang/docs/Extensions.md @@ -291,6 +291,10 @@ end numeric character literal kind prefix on the file name. * Intrinsic procedures TAND and ATAND. Constant folding is currently not supported for these procedures but this is planned. +* When a pair of quotation marks in a character literal are split + by a line continuation in free form, the second quotation mark + may appear at the beginning of the continuation line without an + ampersand, althought one is required by the standard. ### Extensions supported when enabled by options @@ -607,3 +611,4 @@ end module * `ENCODING=` is not in the list of changeable modes on an I/O unit, but every Fortran compiler allows the encoding to be changed on an open unit. + diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp index 09b31b1dc7cc9..d84b62cbc30fb 100644 --- a/flang/lib/Parser/prescan.cpp +++ b/flang/lib/Parser/prescan.cpp @@ -726,6 +726,11 @@ void Prescanner::QuotedCharacterLiteral( break; } inCharLiteral_ = true; + if (insertASpace_) { + Say(GetProvenanceRange(at_, end), + "Repeated quote mark in character literal continuation line should have been preceded by '&'"_port_en_US); + insertASpace_ = false; + } } } inCharLiteral_ = false; diff --git a/flang/test/Parser/continuation-before-quote.f90 b/flang/test/Parser/continuation-before-quote.f90 new file mode 100644 index 0000000000000..4ae669f5ac276 --- /dev/null +++ b/flang/test/Parser/continuation-before-quote.f90 @@ -0,0 +1,10 @@ +! RUN: %flang_fc1 -fsyntax-only %s 2>&1 | FileCheck %s +! Continuation between repeated quotation marks +subroutine test +!CHECK: portability: Repeated quote mark in character literal continuation line should have been preceded by '&' + print *, 'needs an '& +'ampersand''' +!CHECK-NOT: portability: Repeated quote mark in character literal continuation line should have been preceded by '&' + print *, 'has an '& +&'ampersand''' +end