Commit 94d34253 by Bud Davis Committed by Bud Davis

[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
parent c5e82c06
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> 2009-08-21 Janus Weil <janus@gcc.gnu.org>
PR fortran/41106 PR fortran/41106
......
...@@ -121,6 +121,7 @@ format_token; ...@@ -121,6 +121,7 @@ format_token;
static gfc_char_t *format_string; static gfc_char_t *format_string;
static int format_string_pos; static int format_string_pos;
static int format_length, use_last_char; static int format_length, use_last_char;
static int starting_format_length;
static char error_element; static char error_element;
static locus format_locus; static locus format_locus;
...@@ -875,20 +876,11 @@ data_desc: ...@@ -875,20 +876,11 @@ data_desc:
gfc_warning ("The H format specifier at %L is" gfc_warning ("The H format specifier at %L is"
" a Fortran 95 deleted feature", &format_locus); " a Fortran 95 deleted feature", &format_locus);
} }
if (mode == MODE_STRING)
{
format_string += value;
format_length -= value;
}
else
{
while (repeat >0) while (repeat >0)
{ {
next_char (1); next_char (1);
repeat -- ; repeat -- ;
} }
}
break; break;
case FMT_IBOZ: case FMT_IBOZ:
...@@ -1039,6 +1031,13 @@ fail: ...@@ -1039,6 +1031,13 @@ fail:
rv = FAILURE; rv = FAILURE;
finished: 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; return rv;
} }
...@@ -1054,7 +1053,7 @@ check_format_string (gfc_expr *e, bool is_input) ...@@ -1054,7 +1053,7 @@ check_format_string (gfc_expr *e, bool is_input)
mode = MODE_STRING; mode = MODE_STRING;
format_string = e->value.character.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 /* 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 format string that has been calculated, but that's probably not worth the
effort. */ effort. */
......
2009-08-22 Bud Davis <bdavis9659@sbcglobal.net>
PR fortran/28039
* gfortran.dg/fmt_with_extra.f: new file.
2009-08-21 Maciej W. Rozycki <macro@codesourcery.com> 2009-08-21 Maciej W. Rozycki <macro@codesourcery.com>
* lib/target-supports.exp * lib/target-supports.exp
......
! { dg-do compile }
! test case contributed by tobias.burnus@physik.fu-berlin.de
! PR28039 Warn when ignoring extra characters in the format specification
implicit none
real :: r
r = 1.0
write(*,'(a),f)') 'Hello', r !{ dg-warning "Extraneous characters in format at" }
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