Commit 2305fa31 by Jerry DeLisle

re PR fortran/32545 (Give an (compile time) error not a warning for wrong edit format statements)

2007-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/32545
	* io.c (check_format): Always call gfc_error for errors.
	(check_format_string): Change type of this function to try and
	return the result of check_format.
	(check_io_constraints): Return MATCH_ERROR if check_format_string
	returns FAILURE.

2007-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/32612
	* decl.c (get_proc_name): Include attr->mod_proc in check for error.

From-SVN: r126295
parent f01d40db
2007-07-03 Jerry DeLisle <jvdelisle@gcc.gnu.org> 2007-07-03 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/32545
* io.c (check_format): Always call gfc_error for errors.
(check_format_string): Change type of this function to try and
return the result of check_format.
(check_io_constraints): Return MATCH_ERROR if check_format_string
returns FAILURE.
2007-07-03 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/32612
* decl.c (get_proc_name): Include attr->mod_proc in check for error.
2007-07-03 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/32432 PR fortran/32432
* gfortran.h: Change type of gfc_assign_data_value from void to try. * gfortran.h: Change type of gfc_assign_data_value from void to try.
* data.c (gfc_assign_data_value): Return FAILURE if error found. * data.c (gfc_assign_data_value): Return FAILURE if error found.
......
...@@ -708,7 +708,8 @@ get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry) ...@@ -708,7 +708,8 @@ get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry)
/* Trap a procedure with a name the same as interface in the /* Trap a procedure with a name the same as interface in the
encompassing scope. */ encompassing scope. */
if (sym->attr.generic != 0 if (sym->attr.generic != 0
&& (sym->attr.subroutine || sym->attr.function)) && (sym->attr.subroutine || sym->attr.function)
&& !sym->attr.mod_proc)
gfc_error_now ("Name '%s' at %C is already defined" gfc_error_now ("Name '%s' at %C is already defined"
" as a generic interface at %L", " as a generic interface at %L",
name, &sym->declared_at); name, &sym->declared_at);
......
...@@ -842,20 +842,10 @@ extension_optional_comma: ...@@ -842,20 +842,10 @@ extension_optional_comma:
goto format_item; goto format_item;
syntax: syntax:
/* Something went wrong. If the format we're checking is a string, gfc_error ("%s in format string at %C", error);
generate a warning, since the program is correct. If the format
is in a FORMAT statement, this messes up parsing, which is an
error. */
if (mode != MODE_STRING)
gfc_error ("%s in format string at %C", error);
else
{
gfc_warning ("%s in format string at %C", error);
/* TODO: More elaborate measures are needed to show where a problem
is within a format string that has been calculated. */
}
/* TODO: More elaborate measures are needed to show where a problem
is within a format string that has been calculated. */
rv = FAILURE; rv = FAILURE;
finished: finished:
...@@ -866,12 +856,12 @@ finished: ...@@ -866,12 +856,12 @@ finished:
/* Given an expression node that is a constant string, see if it looks /* Given an expression node that is a constant string, see if it looks
like a format string. */ like a format string. */
static void static try
check_format_string (gfc_expr *e, bool is_input) 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;
check_format (is_input); return check_format (is_input);
} }
...@@ -2752,8 +2742,9 @@ if (condition) \ ...@@ -2752,8 +2742,9 @@ if (condition) \
} }
expr = dt->format_expr; expr = dt->format_expr;
if (expr != NULL && expr->expr_type == EXPR_CONSTANT) if (expr != NULL && expr->expr_type == EXPR_CONSTANT
check_format_string (expr, k == M_READ); && check_format_string (expr, k == M_READ) == FAILURE)
return MATCH_ERROR;
return m; return m;
} }
......
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