From 17f62b7e1fef0a04c738419b0108eeb89f6b7463 Mon Sep 17 00:00:00 2001 From: Jim MacArthur Date: Wed, 19 Jun 2019 03:02:21 +0000 Subject: [PATCH] re PR fortran/89103 (Allow blank format items in format strings) 2019-06-19 Jim MacArthur Mark Eggleston 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 From-SVN: r272467 --- gcc/fortran/ChangeLog | 13 +++++++++++++ gcc/fortran/gfortran.texi | 7 ++++++- gcc/fortran/invoke.texi | 13 +++++++++---- gcc/fortran/io.c | 9 +++++++++ gcc/fortran/lang.opt | 4 ++++ gcc/fortran/options.c | 1 + gcc/testsuite/ChangeLog | 8 ++++++++ .../gfortran.dg/dec_format_empty_item_1.f | 19 +++++++++++++++++++ .../gfortran.dg/dec_format_empty_item_2.f | 19 +++++++++++++++++++ .../gfortran.dg/dec_format_empty_item_3.f | 19 +++++++++++++++++++ 10 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/dec_format_empty_item_1.f create mode 100644 gcc/testsuite/gfortran.dg/dec_format_empty_item_2.f create mode 100644 gcc/testsuite/gfortran.dg/dec_format_empty_item_3.f diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 32d961ade96..289be5b6c81 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,16 @@ +2019-06-19 Jim MacArthur + Mark Eggleston + + 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 PR fortran/90921 diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi index 57461e0e42f..c887e7d1a42 100644 --- a/gcc/fortran/gfortran.texi +++ b/gcc/fortran/gfortran.texi @@ -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 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 PRINT 10, 2, 3 10 FORMAT ('FOO='I1' BAR='I2) + print 20, 5, 6 +20 FORMAT (I3, I3,) @end smallexample diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 2e2cb5b2728..2b08ac4de22 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -119,10 +119,10 @@ by type. Explanations are in the following sections. @gccoptlist{-fall-intrinsics -fbackslash -fcray-pointer -fd-lines-as-code @gol -fd-lines-as-comments -fdec -fdec-structure -fdec-intrinsic-ints @gol -fdec-static -fdec-math -fdec-include -fdec-format-defaults @gol --fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 -fdefault-real-10 @gol --fdefault-real-16 -fdollar-ok -ffixed-line-length-@var{n} @gol --ffixed-line-length-none -fpad-source -ffree-form @gol --ffree-line-length-@var{n} -ffree-line-length-none @gol +-fdec-blank-format-item -fdefault-double-8 -fdefault-integer-8 @gol +-fdefault-real-8 -fdefault-real-10 -fdefault-real-16 -fdollar-ok @gol +-ffixed-line-length-@var{n} -ffixed-line-length-none -fpad-source @gol +-ffree-form -ffree-line-length-@var{n} -ffree-line-length-none @gol -fimplicit-none -finteger-4-integer-8 -fmax-identifier-length @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 @@ -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, 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 @opindex @code{fdollar-ok} @cindex @code{$} diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 776cdbf98ce..425c2b86899 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -762,6 +762,15 @@ format_item_1: error = unexpected_end; 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: error = unexpected_element; goto syntax; diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 93ea3d3977b..88674cb5dc7 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -444,6 +444,10 @@ fdec Fortran Var(flag_dec) 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 Fortran Var(flag_dec_include) Enable legacy parsing of INCLUDE as statement. diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index 4f91486e977..3bc79ef9b45 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -75,6 +75,7 @@ set_dec_flags (int value) SET_BITFLAG (flag_dec_math, value, value); SET_BITFLAG (flag_dec_include, value, value); SET_BITFLAG (flag_dec_format_defaults, value, value); + SET_BITFLAG (flag_dec_blank_format_item, value, value); } /* Finalize DEC flags. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 116795fe7a0..8255d9e3751 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-06-19 Jim MacArthur + Mark Eggleston + + 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 * gcc.target/aarch64/pr88834.c: Move from here... diff --git a/gcc/testsuite/gfortran.dg/dec_format_empty_item_1.f b/gcc/testsuite/gfortran.dg/dec_format_empty_item_1.f new file mode 100644 index 00000000000..ed27c18944b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_format_empty_item_1.f @@ -0,0 +1,19 @@ +! { dg-do run } +! { dg-options "-fdec" } +! +! Test blank/empty format items in format string +! +! Test case contributed by Jim MacArthur +! Modified by Mark Eggleston +! + 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 diff --git a/gcc/testsuite/gfortran.dg/dec_format_empty_item_2.f b/gcc/testsuite/gfortran.dg/dec_format_empty_item_2.f new file mode 100644 index 00000000000..2793cb16225 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_format_empty_item_2.f @@ -0,0 +1,19 @@ +! { dg-do run } +! { dg-options "-fdec-blank-format-item" } +! +! Test blank/empty format items in format string +! +! Test case contributed by Jim MacArthur +! Modified by Mark Eggleston +! + 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 diff --git a/gcc/testsuite/gfortran.dg/dec_format_empty_item_3.f b/gcc/testsuite/gfortran.dg/dec_format_empty_item_3.f new file mode 100644 index 00000000000..dbccd671bae --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dec_format_empty_item_3.f @@ -0,0 +1,19 @@ +! { 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 +! Modified by Mark Eggleston +! + 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 -- 2.30.2