From 47cc2d4917c7cb351e561dba5768deaa2d42bf8b Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Fri, 8 Nov 2019 09:14:40 +0100 Subject: [PATCH] Fortran] PR91253 fix continuation-line handling with -pre_include PR fortran/91253 * scanner.c (skip_fixed_comments): Move comment lines to next if block. (gfc_next_char_literal): Fix continue_line setting. (get_file): Remove bogus ATTRIBUTE_UNUSED. From-SVN: r277948 --- gcc/fortran/ChangeLog | 8 ++++++++ gcc/fortran/scanner.c | 26 +++++++++++++++++++++----- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5023949d528..f13444f0011 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2019-11-08 Tobias Burnus PR fortran/90374 diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index e54d483baff..40c06b6b674 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -1050,6 +1050,10 @@ skip_fixed_comments (void) return; } + if (gfc_current_locus.lb != NULL + && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb)) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); + /* If -fopenmp/-fopenacc, we need to handle here 2 things: 1) don't treat !$omp/!$acc|c$omp/c$acc|*$omp / *$acc as comments, but directives @@ -1057,10 +1061,6 @@ skip_fixed_comments (void) !$|c$|*$ should be treated as 2 spaces if the characters in columns 3 to 6 are valid fixed form label columns characters. */ - if (gfc_current_locus.lb != NULL - && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb)) - continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); - if ((flag_openmp || flag_openmp_simd) && !flag_openacc) { if (next_char () == '$') @@ -1313,6 +1313,14 @@ restart: if (flag_openacc) prev_openacc_flag = openacc_flag; + /* This can happen if the input file changed or via cpp's #line + without getting reset (e.g. via input_stmt). It also happens + when pre-including files via -fpre-include=. */ + if (continue_count == 0 + && gfc_current_locus.lb + && continue_line > gfc_linebuf_linenum (gfc_current_locus.lb) + 1) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb) + 1; + continue_flag = 1; if (c == '!') skip_comment_line (); @@ -1475,6 +1483,14 @@ restart: if (flag_openacc) prev_openacc_flag = openacc_flag; + /* This can happen if the input file changed or via cpp's #line + without getting reset (e.g. via input_stmt). It also happens + when pre-including files via -fpre-include=. */ + if (continue_count == 0 + && gfc_current_locus.lb + && continue_line > gfc_linebuf_linenum (gfc_current_locus.lb) + 1) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb) + 1; + continue_flag = 1; old_loc = gfc_current_locus; @@ -1943,7 +1959,7 @@ next_char: the file stack. */ static gfc_file * -get_file (const char *name, enum lc_reason reason ATTRIBUTE_UNUSED) +get_file (const char *name, enum lc_reason reason) { gfc_file *f; -- 2.30.2