aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flang/docs/Extensions.md5
-rw-r--r--flang/lib/Parser/prescan.cpp5
-rw-r--r--flang/test/Parser/continuation-before-quote.f9010
3 files changed, 20 insertions, 0 deletions
diff --git a/flang/docs/Extensions.md b/flang/docs/Extensions.md
index 5938ecc..4646e0b 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 09b31b1..d84b62cb 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 0000000..4ae669f
--- /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