Commit a48ebf39 by Francois-Xavier Coudert Committed by François-Xavier Coudert

re PR fortran/34108 (ICE: Segmentation fault occurs by "write(*,0)" statement)

        PR fortran/34108

        * io.c (check_format_string): Only check character expressions.
        (match_dt_format): Return MATCH_ERROR if that is what
        gfc_match_st_label said.

        * gfortran.dg/fmt_label_1.f90: New test.

From-SVN: r130249
parent de03de64
2007-11-17 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/34108
* io.c (check_format_string): Only check character expressions.
(match_dt_format): Return MATCH_ERROR if that is what
gfc_match_st_label said.
2007-11-16 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/33957
......
......@@ -919,7 +919,7 @@ finished:
static try
check_format_string (gfc_expr *e, bool is_input)
{
if (!e || e->expr_type != EXPR_CONSTANT)
if (!e || e->ts.type != BT_CHARACTER || e->expr_type != EXPR_CONSTANT)
return SUCCESS;
mode = MODE_STRING;
......@@ -2082,6 +2082,7 @@ match_dt_format (gfc_dt *dt)
locus where;
gfc_expr *e;
gfc_st_label *label;
match m;
where = gfc_current_locus;
......@@ -2094,7 +2095,7 @@ match_dt_format (gfc_dt *dt)
return MATCH_YES;
}
if (gfc_match_st_label (&label) == MATCH_YES)
if ((m = gfc_match_st_label (&label)) == MATCH_YES)
{
if (dt->format_expr != NULL || dt->format_label != NULL)
{
......@@ -2108,6 +2109,9 @@ match_dt_format (gfc_dt *dt)
dt->format_label = label;
return MATCH_YES;
}
else if (m == MATCH_ERROR)
/* The label was zero or too large. Emit the correct diagnosis. */
return MATCH_ERROR;
if (gfc_match_expr (&e) == MATCH_YES)
{
......
2007-11-17 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/34108
* gfortran.dg/fmt_label_1.f90: New test.
2007-11-16 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/33957
! { dg-do compile }
!
! Check for diagnostics (PR 34108)
write (*,0) 'xxx' ! { dg-error "Statement label .* is zero" }
write (*,1) 'xxx' ! { dg-error "FORMAT label .* not defined" }
write (*,123456) 'xxx' ! { dg-error "Too many digits in statement label" }
write (*,-1) 'xxx' ! { dg-error "" }
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