aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorBud Davis <bdavis9659@sbcglobal.net>2009-08-23 02:19:59 +0000
committerBud Davis <bdavis@gcc.gnu.org>2009-08-23 02:19:59 +0000
commit94d342534efdfcdbc6410c9247ec81a2c13217e9 (patch)
tree4032a03228b4ac5fe80f18a30191578d2628277d /gcc/fortran
parentc5e82c06a77afa7c8648b69772d7c17f02a9f27d (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/fortran/io.c29
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. */