[flang] Fix line continuation after bare labels (fm200.f)
authorpeter klausler <pklausler@nvidia.com>
Fri, 26 Jun 2020 19:58:05 +0000 (12:58 -0700)
committerpeter klausler <pklausler@nvidia.com>
Sat, 27 Jun 2020 00:07:38 +0000 (17:07 -0700)
Fixed-form line continuation was not working when the
preceding line was a bare label.

Reviewed By: tskeith

Differential Revision: https://reviews.llvm.org/D82687

flang/lib/Parser/prescan.cpp
flang/lib/Parser/prescan.h

index 90b7192..07ddbdd 100644 (file)
@@ -272,6 +272,7 @@ void Prescanner::LabelField(TokenSequence &token, int outCol) {
       token.CloseToken();
     }
   }
+  SkipToNextSignificantCharacter();
 }
 
 void Prescanner::SkipToEndOfLine() {
@@ -298,6 +299,14 @@ void Prescanner::NextChar() {
     at_ += 3;
     encoding_ = Encoding::UTF_8;
   }
+  SkipToNextSignificantCharacter();
+}
+
+// Skip everything that should be ignored until the next significant
+// character is reached; handles C-style comments in preprocessing
+// directives, Fortran ! comments, stuff after the right margin in
+// fixed form, and all forms of line continuation.
+void Prescanner::SkipToNextSignificantCharacter() {
   if (inPreprocessorDirective_) {
     SkipCComments();
   } else {
index f2840c3..3a08a90 100644 (file)
@@ -147,6 +147,7 @@ private:
   void SkipToEndOfLine();
   bool MustSkipToEndOfLine() const;
   void NextChar();
+  void SkipToNextSignificantCharacter();
   void SkipCComments();
   void SkipSpaces();
   static const char *SkipWhiteSpace(const char *);