Index: flang/docs/Extensions.md =================================================================== --- flang/docs/Extensions.md +++ flang/docs/Extensions.md @@ -291,6 +291,10 @@ 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 @@ * `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. + Index: flang/lib/Parser/prescan.cpp =================================================================== --- flang/lib/Parser/prescan.cpp +++ flang/lib/Parser/prescan.cpp @@ -726,6 +726,11 @@ 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; Index: flang/test/Parser/continuation-before-quote.f90 =================================================================== --- /dev/null +++ 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