diff options
author | Bud Davis <bdavis9659@sbcglobal.net> | 2009-08-23 02:19:59 +0000 |
---|---|---|
committer | Bud Davis <bdavis@gcc.gnu.org> | 2009-08-23 02:19:59 +0000 |
commit | 94d342534efdfcdbc6410c9247ec81a2c13217e9 (patch) | |
tree | 4032a03228b4ac5fe80f18a30191578d2628277d /gcc/fortran | |
parent | c5e82c06a77afa7c8648b69772d7c17f02a9f27d (diff) | |
download | gcc-94d342534efdfcdbc6410c9247ec81a2c13217e9.zip gcc-94d342534efdfcdbc6410c9247ec81a2c13217e9.tar.gz gcc-94d342534efdfcdbc6410c9247ec81a2c13217e9.tar.bz2 |
[multiple changes]
2009-08-22 Bud Davis <bdavis9659@sbcglobal.net>
PR fortran/28093
* io.c : added variable to store original len of fmt
* io.c (check_format): Consume H items using next_char
in both modes to handle consecutive single quotes.
Test for extra characters in fmt, issue warning.
2009-08-22 Bud Davis <bdavis9659@sbcglobal.net>
PR fortran/28039
* gfortran.dg/fmt_with_extra.f: new file.
From-SVN: r151021
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/io.c | 29 |
2 files changed, 22 insertions, 15 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 53a9d6d..635e68c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2009-08-22 Bud Davis <bdavis9659@sbcglobal.net> + + PR fortran/28093 + * io.c : added variable to store original len of fmt + * io.c (check_format): Consume H items using next_char + in both modes to handle consecutive single quotes. + Test for extra characters in fmt, issue warning. + 2009-08-21 Janus Weil <janus@gcc.gnu.org> PR fortran/41106 diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index f11ea38..4f60b80 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -121,6 +121,7 @@ format_token; static gfc_char_t *format_string; static int format_string_pos; static int format_length, use_last_char; +static int starting_format_length; static char error_element; static locus format_locus; @@ -875,20 +876,11 @@ data_desc: gfc_warning ("The H format specifier at %L is" " a Fortran 95 deleted feature", &format_locus); } - - if (mode == MODE_STRING) - { - format_string += value; - format_length -= value; - } - else - { - while (repeat >0) - { - next_char (1); - repeat -- ; - } - } + while (repeat >0) + { + next_char (1); + repeat -- ; + } break; case FMT_IBOZ: @@ -1039,6 +1031,13 @@ fail: rv = FAILURE; finished: + /* check for extraneous characters at end of valid format string */ + if ( starting_format_length > format_length ) + { + format_locus.nextc += format_length + 1; /* point to the extra */ + gfc_warning ("Extraneous characters in format at %L", &format_locus); + } + return rv; } @@ -1054,7 +1053,7 @@ check_format_string (gfc_expr *e, bool is_input) mode = MODE_STRING; format_string = e->value.character.string; - + starting_format_length = e->value.character.length; /* More elaborate measures are needed to show where a problem is within a format string that has been calculated, but that's probably not worth the effort. */ |