From 9357a094bcecfd4ba69c65e81abf5090a30bc263 Mon Sep 17 00:00:00 2001 From: burnus Date: Tue, 22 Jan 2008 07:33:46 +0000 Subject: [PATCH] 2008-01-22 Tobias Burnus PR fortran/34899 * scanner.c (load_line): Support continuation * lines. * invoke.texi (-Wtabs): Document this. 2008-01-22 Tobias Burnus PR fortran/34899 * gfortran.dg/tab_continuation.f: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131713 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/invoke.texi | 9 +++++---- gcc/fortran/scanner.c | 22 ++++++++++++++++++---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/tab_continuation.f | 15 +++++++++++++++ 5 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/tab_continuation.f diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c6be6130a80..57c9142ba94 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2008-01-22 Tobias Burnus + + PR fortran/34899 + * scanner.c (load_line): Support continuation lines. + * invoke.texi (-Wtabs): Document this. + 2008-01-22 Paul Thomas PR fortran/34896 diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 22dd8983acd..0a67785d299 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -499,10 +499,11 @@ A TRANSFER specifies a source that is shorter than the destination. @cindex warnings, tabs @cindex tabulators By default, tabs are accepted as whitespace, but tabs are not members -of the Fortran Character Set. @option{-Wno-tabs} will cause a warning -to be issued if a tab is encountered. Note, @option{-Wno-tabs} is active -for @option{-pedantic}, @option{-std=f95}, @option{-std=f2003}, and -@option{-Wall}. +of the Fortran Character Set. For continuation lines, a tab followed +by a digit between 1 and 9 is supported. @option{-Wno-tabs} will cause +a warning to be issued if a tab is encountered. Note, @option{-Wno-tabs} +is active for @option{-pedantic}, @option{-std=f95}, @option{-std=f2003}, +and @option{-Wall}. @item -Wunderflow @opindex @code{Wunderflow} diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index da4c37b155e..9bbb06581c9 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -1106,6 +1106,7 @@ load_line (FILE *input, char **pbuf, int *pbuflen) int trunc_flag = 0, seen_comment = 0; int seen_printable = 0, seen_ampersand = 0; char *buffer; + bool found_tab = false; /* Determine the maximum allowed line length. */ if (gfc_current_form == FORM_FREE) @@ -1184,17 +1185,30 @@ load_line (FILE *input, char **pbuf, int *pbuflen) && (c == '*' || c == 'c' || c == 'd')) seen_comment = 1; - if (gfc_current_form == FORM_FIXED && c == '\t' && i <= 6) + /* Vendor extension: "1" marks a continuation line. */ + if (found_tab) { + found_tab = false; + if (c >= '1' && c <= '9') + { + *(buffer-1) = c; + continue; + } + } + + if (gfc_current_form == FORM_FIXED && c == '\t' && i < 6) + { + found_tab = true; + if (!gfc_option.warn_tabs && seen_comment == 0 && current_line != linenum) { linenum = current_line; - gfc_warning_now ("Nonconforming tab character in column 1 " - "of line %d", linenum); + gfc_warning_now ("Nonconforming tab character in column %d " + "of line %d", i+1, linenum); } - while (i <= 6) + while (i < 6) { *buffer++ = ' '; i++; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b3095a15f76..7e4fd057f0a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-22 Tobias Burnus + + PR fortran/34899 + * gfortran.dg/tab_continuation.f: New. + 2008-01-22 Paul Thomas PR fortran/34896 diff --git a/gcc/testsuite/gfortran.dg/tab_continuation.f b/gcc/testsuite/gfortran.dg/tab_continuation.f new file mode 100644 index 00000000000..448cd20864e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/tab_continuation.f @@ -0,0 +1,15 @@ +! { dg-do compile } +! +! PR fortran/34899 +! +! Allow 1 to 9 as continuation marker, which is a very common +! vendor extension. +! + PARAMETER (LUMIN=11,LUMAX=20,MAPMAX=256,NPLANEMAX=999) + INTEGER NAXIS(0:MAPMAX,LUMIN:LUMAX),NAXIS1(0:MAPMAX,LUMIN:LUMAX), + 1NAXIS2(0:MAPMAX,LUMIN:LUMAX),NAXIS3(0:MAPMAX,LUMIN:LUMAX) + end +! { dg-warning "Nonconforming tab character in column 1 of line 8" "Nonconforming tab" {target "*-*-*"} 0 } +! { dg-warning "Nonconforming tab character in column 1 of line 9" "Nonconforming tab" {target "*-*-*"} 0 } +! { dg-warning "Nonconforming tab character in column 1 of line 10" "Nonconforming tab" {target "*-*-*"} 0 } +! { dg-warning "Nonconforming tab character in column 1 of line 11" "Nonconforming tab" {target "*-*-*"} 0 } -- 2.11.0