Commit 17f62b7e by Jim MacArthur Committed by Jerry DeLisle

re PR fortran/89103 (Allow blank format items in format strings)

2019-06-19  Jim MacArthur  <jim.macarthur@codethink.co.uk>
	    Mark Eggleston  <mark.eggleston@codethink.com>

	PR fortran/89103
	* gfortran.texi: Add -fdec-blank-format-item
	* invoke.texi: Add option to list of options.
	* invoke.texi: Add to section on Commas in FORMAT specifications.
	* io.c (check_format): At FMT_RPAREN goto finished if
	-fdec-blank-format-item otherwise set error string.
	* lang.opt: Add new option.
	* options.c (set_dec_flags): Add SET_BITFLAG for
	flag_dec_format_defaults.

	* gfortran.dg/dec_format_empty_item_1.f: New test.
	* gfortran.dg/dec_format_empty_item_2.f: New test.
	* gfortran.dg/dec_format_empty_item_3.f: New test.

Co-Authored-By: Mark Eggleston <mark.eggleston@codethink.com>

From-SVN: r272467
parent eb54b267
2019-06-19 Jim MacArthur <jim.macarthur@codethink.co.uk>
Mark Eggleston <mark.eggleston@codethink.com>
PR fortran/89103
* gfortran.texi: Add -fdec-blank-format-item
* invoke.texi: Add option to list of options.
* invoke.texi: Add to section on Commas in FORMAT specifications.
* io.c (check_format): At FMT_RPAREN goto finished if
-fdec-blank-format-item otherwise set error string.
* lang.opt: Add new option.
* options.c (set_dec_flags): Add SET_BITFLAG for
flag_dec_format_defaults.
2019-06-18 Julian Brown <julian@codesourcery.com> 2019-06-18 Julian Brown <julian@codesourcery.com>
PR fortran/90921 PR fortran/90921
......
...@@ -1761,11 +1761,16 @@ When omitted, the count is implicitly assumed to be one. ...@@ -1761,11 +1761,16 @@ When omitted, the count is implicitly assumed to be one.
To support legacy codes, GNU Fortran allows the comma separator To support legacy codes, GNU Fortran allows the comma separator
to be omitted immediately before and after character string edit to be omitted immediately before and after character string edit
descriptors in @code{FORMAT} statements. descriptors in @code{FORMAT} statements. A comma with no following format
decriptor is permited if the @option{-fdec-blank-format-item} is given on
the command line. This is considered non-conforming code and is
discouraged.
@smallexample @smallexample
PRINT 10, 2, 3 PRINT 10, 2, 3
10 FORMAT ('FOO='I1' BAR='I2) 10 FORMAT ('FOO='I1' BAR='I2)
print 20, 5, 6
20 FORMAT (I3, I3,)
@end smallexample @end smallexample
......
...@@ -119,10 +119,10 @@ by type. Explanations are in the following sections. ...@@ -119,10 +119,10 @@ by type. Explanations are in the following sections.
@gccoptlist{-fall-intrinsics -fbackslash -fcray-pointer -fd-lines-as-code @gol @gccoptlist{-fall-intrinsics -fbackslash -fcray-pointer -fd-lines-as-code @gol
-fd-lines-as-comments -fdec -fdec-structure -fdec-intrinsic-ints @gol -fd-lines-as-comments -fdec -fdec-structure -fdec-intrinsic-ints @gol
-fdec-static -fdec-math -fdec-include -fdec-format-defaults @gol -fdec-static -fdec-math -fdec-include -fdec-format-defaults @gol
-fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 -fdefault-real-10 @gol -fdec-blank-format-item -fdefault-double-8 -fdefault-integer-8 @gol
-fdefault-real-16 -fdollar-ok -ffixed-line-length-@var{n} @gol -fdefault-real-8 -fdefault-real-10 -fdefault-real-16 -fdollar-ok @gol
-ffixed-line-length-none -fpad-source -ffree-form @gol -ffixed-line-length-@var{n} -ffixed-line-length-none -fpad-source @gol
-ffree-line-length-@var{n} -ffree-line-length-none @gol -ffree-form -ffree-line-length-@var{n} -ffree-line-length-none @gol
-fimplicit-none -finteger-4-integer-8 -fmax-identifier-length @gol -fimplicit-none -finteger-4-integer-8 -fmax-identifier-length @gol
-fmodule-private -ffixed-form -fno-range-check -fopenacc -fopenmp @gol -fmodule-private -ffixed-form -fno-range-check -fopenacc -fopenmp @gol
-freal-4-real-10 -freal-4-real-16 -freal-4-real-8 -freal-8-real-10 @gol -freal-4-real-10 -freal-4-real-16 -freal-4-real-8 -freal-8-real-10 @gol
...@@ -289,6 +289,11 @@ be on a single line and can use line continuations. ...@@ -289,6 +289,11 @@ be on a single line and can use line continuations.
Enable format specifiers F, G and I to be used without width specifiers, Enable format specifiers F, G and I to be used without width specifiers,
default widths will be used instead. default widths will be used instead.
@item -fdec-blank-format-item
@opindex @code{fdec-blank-format-item}
Enable a blank format item at the end of a format specification i.e. nothing
following the final comma.
@item -fdollar-ok @item -fdollar-ok
@opindex @code{fdollar-ok} @opindex @code{fdollar-ok}
@cindex @code{$} @cindex @code{$}
......
...@@ -762,6 +762,15 @@ format_item_1: ...@@ -762,6 +762,15 @@ format_item_1:
error = unexpected_end; error = unexpected_end;
goto syntax; goto syntax;
case FMT_RPAREN:
if (flag_dec_blank_format_item)
goto finished;
else
{
error = G_("Missing item in format string at %L");
goto syntax;
}
default: default:
error = unexpected_element; error = unexpected_element;
goto syntax; goto syntax;
......
...@@ -444,6 +444,10 @@ fdec ...@@ -444,6 +444,10 @@ fdec
Fortran Var(flag_dec) Fortran Var(flag_dec)
Enable all DEC language extensions. Enable all DEC language extensions.
fdec-blank-format-item
Fortran Var(flag_dec_blank_format_item)
Enable the use of blank format items in format strings.
fdec-include fdec-include
Fortran Var(flag_dec_include) Fortran Var(flag_dec_include)
Enable legacy parsing of INCLUDE as statement. Enable legacy parsing of INCLUDE as statement.
......
...@@ -75,6 +75,7 @@ set_dec_flags (int value) ...@@ -75,6 +75,7 @@ set_dec_flags (int value)
SET_BITFLAG (flag_dec_math, value, value); SET_BITFLAG (flag_dec_math, value, value);
SET_BITFLAG (flag_dec_include, value, value); SET_BITFLAG (flag_dec_include, value, value);
SET_BITFLAG (flag_dec_format_defaults, value, value); SET_BITFLAG (flag_dec_format_defaults, value, value);
SET_BITFLAG (flag_dec_blank_format_item, value, value);
} }
/* Finalize DEC flags. */ /* Finalize DEC flags. */
......
2019-06-19 Jim MacArthur <jim.macarthur@codethink.co.uk>
Mark Eggleston <mark.eggleston@codethink.com>
PR fortran/89103
* gfortran.dg/dec_format_empty_item_1.f: New test.
* gfortran.dg/dec_format_empty_item_2.f: New test.
* gfortran.dg/dec_format_empty_item_3.f: New test.
2019-06-19 Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org> 2019-06-19 Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
* gcc.target/aarch64/pr88834.c: Move from here... * gcc.target/aarch64/pr88834.c: Move from here...
......
! { dg-do run }
! { dg-options "-fdec" }
!
! Test blank/empty format items in format string
!
! Test case contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
! Modified by Mark Eggleston <mark.eggleston@codethink.com>
!
PROGRAM blank_format_items
INTEGER A/0/
OPEN(1, status="scratch")
WRITE(1, 10) 100
REWIND(1)
READ(1, 10) A
IF (a.NE.100) STOP 1
PRINT 10, A
10 FORMAT( I5,)
END
! { dg-do run }
! { dg-options "-fdec-blank-format-item" }
!
! Test blank/empty format items in format string
!
! Test case contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
! Modified by Mark Eggleston <mark.eggleston@codethink.com>
!
PROGRAM blank_format_items
INTEGER A/0/
OPEN(1, status="scratch")
WRITE(1, 10) 100
REWIND(1)
READ(1, 10) A
IF (a.NE.100) STOP 1
PRINT 10, A
10 FORMAT( I5,)
END
! { dg-do compile }
! { dg-options "-fdec -fno-dec-blank-format-item" }
!
! Test blank/empty format items in format string
!
! Test case contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
! Modified by Mark Eggleston <mark.eggleston@codethink.com>
!
PROGRAM blank_format_items
INTEGER A/0/
OPEN(1, status="scratch")
WRITE(1, 10) 100 ! { dg-error "FORMAT label 10 at" }
REWIND(1)
READ(1, 10) A ! { dg-error "FORMAT label 10 at" }
IF (a.NE.100) STOP 1
PRINT 10, A ! { dg-error "FORMAT label 10 at" }
10 FORMAT( I5,) ! { dg-error "Missing item" }
END
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment