[patch,fortran] PR19261 continuation character illegal as first non-blank character in statement
Jerry DeLisle
jvdelisle@verizon.net
Thu Oct 12 04:29:00 GMT 2006
PING I will apply this weekend of no objections.
Jerry DeLisle wrote:
> :ADDPATCH fortran:
>
> The attached patch adds warnings for illegal use of '&' in lines. This
> follows from F95 Standard 3.3.1.3. With -pedantic errors are given
> instead of warnings.
>
> I moved the note about the unavailable error machinery to the top of
> load_line since it applies to more than one place in this function.
>
> If someone can figure out how to get that test case to work with the
> deja-magic, I would appreciate it. Can't get rid of the excess warnings
> tests with -S
>
> Regression tested and libgomp tested OK. The libgomp tests require
> Jacub's patch that fixes the PR19260 fix breakage.
>
> OK to commit to 4.2?
>
> Regards,
>
> Jerry
>
> 2006-10-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
>
> PR fortran/19261
> * scanner.c (load_line): Add checks for illegal use of '&' and issue
> warnings. Issue errors with -pedantic.
>
>
> ------------------------------------------------------------------------
>
> Index: scanner.c
> ===================================================================
> *** scanner.c (revision 117424)
> --- scanner.c (working copy)
> *************** gfc_gobble_whitespace (void)
> *** 931,937 ****
> In fixed mode, we expand a tab that occurs within the statement
> label region to expand to spaces that leave the next character in
> the source region.
> ! load_line returns whether the line was truncated. */
>
> static int
> load_line (FILE * input, char **pbuf, int *pbuflen)
> --- 931,941 ----
> In fixed mode, we expand a tab that occurs within the statement
> label region to expand to spaces that leave the next character in
> the source region.
> ! load_line returns whether the line was truncated.
> !
> ! NOTE: The error machinery isn't available at this point, so we can't
> ! easily report line and column numbers consistent with other
> ! parts of gfortran. */
>
> static int
> load_line (FILE * input, char **pbuf, int *pbuflen)
> *************** load_line (FILE * input, char **pbuf, in
> *** 939,944 ****
> --- 943,949 ----
> static int linenum = 0, current_line = 1;
> int c, maxlen, i, preprocessor_flag, buflen = *pbuflen;
> int trunc_flag = 0, seen_comment = 0;
> + int seen_printable = 0, seen_ampersand = 0;
> char *buffer;
>
> /* Determine the maximum allowed line length.
> *************** load_line (FILE * input, char **pbuf, in
> *** 990,996 ****
> if (c == EOF)
> break;
> if (c == '\n')
> ! break;
>
> if (c == '\r')
> continue; /* Gobble characters. */
> --- 995,1014 ----
> if (c == EOF)
> break;
> if (c == '\n')
> ! {
> ! /* Check for illegal use of ampersand. See F95 Standard 3.3.1.3. */
> ! if (gfc_current_form == FORM_FREE
> ! && !seen_printable && seen_ampersand)
> ! {
> ! if (pedantic)
> ! gfc_error_now
> ! ("'&' not allowed by itself in line %d", current_line);
> ! else
> ! gfc_warning_now
> ! ("'&' not allowed by itself in line %d", current_line);
> ! }
> ! break;
> ! }
>
> if (c == '\r')
> continue; /* Gobble characters. */
> *************** load_line (FILE * input, char **pbuf, in
> *** 1004,1009 ****
> --- 1022,1046 ----
> break;
> }
>
> + /* Check for illegal use of ampersand. See F95 Standard 3.3.1.3. */
> + if (c == '&')
> + seen_ampersand = 1;
> +
> + if ((c != ' ' && c != '&' && c != '!') || (c == '!' && !seen_ampersand))
> + seen_printable = 1;
> +
> + if (gfc_current_form == FORM_FREE
> + && c == '!' && !seen_printable && seen_ampersand)
> + {
> + if (pedantic)
> + gfc_error_now (
> + "'&' not allowed by itself with comment in line %d", current_line);
> + else
> + gfc_warning_now (
> + "'&' not allowed by itself with comment in line %d", current_line);
> + seen_printable = 1;
> + }
> +
> /* Is this a fixed-form comment? */
> if (gfc_current_form == FORM_FIXED && i == 0
> && (c == '*' || c == 'c' || c == 'd'))
> *************** load_line (FILE * input, char **pbuf, in
> *** 1011,1019 ****
>
> if (gfc_current_form == FORM_FIXED && c == '\t' && i <= 6)
> {
> - /* The error machinery isn't available at this point, so we can't
> - easily report line and column numbers consistent with other
> - parts of gfortran. */
> if (!gfc_option.warn_tabs && seen_comment == 0
> && current_line != linenum)
> {
> --- 1048,1053 ----
>
>
> ------------------------------------------------------------------------
>
> ! { dg-do compile }
> ! PR19261 test fix for illegal ampersands in lines.
> ! Submitted by Jerry DeLisle <jvdelisle@gcc.gnu.org>
> print *, 12345
> ! & !
> print *, 123&
> &45
> print *, 54321&
> & ! { dg-warning "not allowed by itself with comment in line" }
> end
More information about the Fortran
mailing list