diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-09-02 08:50:13 +0000 |
---|---|---|
committer | Daniel Kraft <domob@gcc.gnu.org> | 2008-09-02 10:50:13 +0200 |
commit | 900e887f6d2dd21c118f5de7cbcf3d56173a02a7 (patch) | |
tree | 317dab79bd42333332ad5ed9c18cf1fec7ff1af4 /gcc | |
parent | 52f4993488d2dd12d66dd99c2937e59319d0b1b6 (diff) | |
download | gcc-900e887f6d2dd21c118f5de7cbcf3d56173a02a7.zip gcc-900e887f6d2dd21c118f5de7cbcf3d56173a02a7.tar.gz gcc-900e887f6d2dd21c118f5de7cbcf3d56173a02a7.tar.bz2 |
re PR fortran/37228 (F2008: Support g0.<d> edit descriptor)
2008-09-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/37228
* io.c (check_format): Allow specifying precision with g0 format.
2008-09-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/37301
PR libfortran/37228
* io/io.h (write_real_g0): Declare new function to handle g0.d format.
* io/transfer.c (formatted_transfer_scalar): Use new function.
* io/format.c (parse_format_list): Enable g0.d.
* io/write.c (write_a_char4): Delete unused var.
(set_fnode_default): New function to set the default fnode w, d, and e
factored from write_real. (write_real): Use new factored function.
(write_real_g0): New function that sets d to that passed by g0.d format
specifier and set format to ES. Default values for w and e are used
from the new function, set_fnode_default.
2008-09-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/37228
* gfortran.dg/fmt_g0_4.f08: Revised test.
From-SVN: r139886
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/io.c | 25 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/fmt_g0_4.f08 | 12 |
4 files changed, 32 insertions, 15 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a878f0b..213af61 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2008-09-01 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/37228 + * io.c (check_format): Allow specifying precision with g0 format. + 2008-09-02 Daniel Kraft <d@domob.eu> * gfortran.h (struct gfc_namespace): New member `implicit_loc'. diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 979dfc2..298c758 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -483,7 +483,6 @@ check_format (bool is_input) " at %L"); const char *unexpected_end = _("Unexpected end of format string"); const char *zero_width = _("Zero width in format descriptor"); - const char *g0_precision = _("Specifying precision with G0 not allowed"); const char *error; format_token t, u; @@ -701,27 +700,25 @@ data_desc: error = zero_width; goto syntax; } - if (gfc_notify_std (GFC_STD_F2008, "Fortran 2008: 'G0' in " "format at %C") == FAILURE) return FAILURE; + u = format_lex (); + if (u != FMT_PERIOD) + { + saved_token = u; + break; + } u = format_lex (); - if (u == FMT_PERIOD) + if (u == FMT_ERROR) + goto fail; + if (u != FMT_POSINT) { - error = g0_precision; + error = posint_required; goto syntax; } - saved_token = u; - goto between_desc; - } - - if (u == FMT_ERROR) - goto fail; - if (u != FMT_POSINT) - { - error = posint_required; - goto syntax; + break; } u = format_lex (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5557733..83d310f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-09-01 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/37228 + * gfortran.dg/fmt_g0_4.f08: Revised test. + 2008-09-02 Daniel Kraft <d@domob.eu> * gfortran.dg/abstract_type_1.f90: New test. diff --git a/gcc/testsuite/gfortran.dg/fmt_g0_4.f08 b/gcc/testsuite/gfortran.dg/fmt_g0_4.f08 index 149b1aa..500117e 100644 --- a/gcc/testsuite/gfortran.dg/fmt_g0_4.f08 +++ b/gcc/testsuite/gfortran.dg/fmt_g0_4.f08 @@ -1,5 +1,15 @@ ! { dg-do compile } ! { dg-options "-std=f2008" } ! PR36725 Compile time error for g0 edit descriptor -print '(g0.9)', 0.1 ! { dg-error "Specifying precision" } +character(30) :: line +write(line, '(g0.3)') 0.1 +if (line.ne." 1.000E-01") call abort +write(line, '(g0.9)') 1.0 +if (line.ne."1.000000000E+00") call abort +write(line, '(g0.5)') 29.23 +if (line.ne." 2.92300E+01") call abort +write(line, '(g0.8)') -28.4 +if (line.ne."-2.83999996E+01") call abort +write(line, '(g0.8)') -0.0001 +if (line.ne."-9.99999975E-05") call abort end |