Commit 5d2d72cb by Jerry DeLisle

re PR fortran/43851 (Add _gfortran_error_stop_numeric)

2010-05-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>

	PR fortran/43851
	* match.c (gfc_match_stopcode): Use gfc_match_init_expr. Go to cleanup
	before returning MATCH_ERROR. Add check for scalar. Add check for
	default integer kind.

From-SVN: r159747
parent 7a8cba34
2010-05-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/43851
* match.c (gfc_match_stopcode): Use gfc_match_init_expr. Go to cleanup
before returning MATCH_ERROR. Add check for scalar. Add check for
default integer kind.
2010-05-22 Janus Weil <janus@gcc.gnu.org> 2010-05-22 Janus Weil <janus@gcc.gnu.org>
PR fortran/44212 PR fortran/44212
......
...@@ -2013,7 +2013,7 @@ gfc_match_stopcode (gfc_statement st) ...@@ -2013,7 +2013,7 @@ gfc_match_stopcode (gfc_statement st)
if (gfc_match_eos () != MATCH_YES) if (gfc_match_eos () != MATCH_YES)
{ {
m = gfc_match_expr (&e); m = gfc_match_init_expr (&e);
if (m == MATCH_ERROR) if (m == MATCH_ERROR)
goto cleanup; goto cleanup;
if (m == MATCH_NO) if (m == MATCH_NO)
...@@ -2033,7 +2033,7 @@ gfc_match_stopcode (gfc_statement st) ...@@ -2033,7 +2033,7 @@ gfc_match_stopcode (gfc_statement st)
if (st == ST_STOP && gfc_find_state (COMP_CRITICAL) == SUCCESS) if (st == ST_STOP && gfc_find_state (COMP_CRITICAL) == SUCCESS)
{ {
gfc_error ("Image control statement STOP at %C in CRITICAL block"); gfc_error ("Image control statement STOP at %C in CRITICAL block");
return MATCH_ERROR; goto cleanup;
} }
if (e != NULL) if (e != NULL)
...@@ -2042,7 +2042,14 @@ gfc_match_stopcode (gfc_statement st) ...@@ -2042,7 +2042,14 @@ gfc_match_stopcode (gfc_statement st)
{ {
gfc_error ("STOP code at %L must be either INTEGER or CHARACTER type", gfc_error ("STOP code at %L must be either INTEGER or CHARACTER type",
&e->where); &e->where);
return MATCH_ERROR; goto cleanup;
}
if (e->rank != 0)
{
gfc_error ("STOP code at %L must be scalar",
&e->where);
goto cleanup;
} }
if (e->ts.type == BT_CHARACTER if (e->ts.type == BT_CHARACTER
...@@ -2050,14 +2057,15 @@ gfc_match_stopcode (gfc_statement st) ...@@ -2050,14 +2057,15 @@ gfc_match_stopcode (gfc_statement st)
{ {
gfc_error ("STOP code at %L must be default character KIND=%d", gfc_error ("STOP code at %L must be default character KIND=%d",
&e->where, (int) gfc_default_character_kind); &e->where, (int) gfc_default_character_kind);
return MATCH_ERROR; goto cleanup;
} }
if (e->expr_type != EXPR_CONSTANT) if (e->ts.type == BT_INTEGER
&& e->ts.kind != gfc_default_integer_kind)
{ {
gfc_error ("STOP code at %L must be a constant expression", gfc_error ("STOP code at %L must be default integer KIND=%d",
&e->where); &e->where, (int) gfc_default_integer_kind);
return MATCH_ERROR; goto cleanup;
} }
} }
......
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