Commit 86e9d05f by Tobias Schlüter

re PR fortran/33269 (Diagnose missing "(" in "PRINT ('a'),")

PR fortran/33269
fortran/
* io.c (check_format_string): Move NULL and constant checks into
this function.
(check_io_constraints): Call gfc_simplify_expr() before calling
check_format_string().  Remove NULL and constant checks.
testsuite/
* gfortran.dg/fmt_error_2.f90: New.

From-SVN: r128732
parent c028b286
2007-09-23 Tobias Schlter <tobi@gcc.gnu.org>
PR fortran/33269
* io.c (check_format_string): Move NULL and constant checks into
this function.
(check_io_constraints): Call gfc_simplify_expr() before calling
check_format_string(). Remove NULL and constant checks.
2007-09-24 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/33538
......
......@@ -919,6 +919,9 @@ finished:
static try
check_format_string (gfc_expr *e, bool is_input)
{
if (!e || e->expr_type != EXPR_CONSTANT)
return SUCCESS;
mode = MODE_STRING;
format_string = e->value.character.string;
return check_format (is_input);
......@@ -2786,8 +2789,8 @@ if (condition) \
}
expr = dt->format_expr;
if (expr != NULL && expr->expr_type == EXPR_CONSTANT
&& check_format_string (expr, k == M_READ) == FAILURE)
if (gfc_simplify_expr (expr, 0) == FAILURE
|| check_format_string (expr, k == M_READ) == FAILURE)
return MATCH_ERROR;
return m;
......
2007-09-23 Tobias Schlter <tobi@gcc.gnu.org>
PR fortran/33269
* io.c (check_format_string): Move NULL and constant checks into
this function.
(check_io_constraints): Call gfc_simplify_expr() before calling
check_format_string(). Remove NULL and constant checks.
2007-09-24 Roman Zippel <zippel@linux-m68k.org>
* gcc.c-torture/execute/loop-2f.x: New. Disable test for m68k-linux.
! { dg-do compile }
! PR 33269: we used to not simplify format strings before checking if
! they were valid, leading to a missed error.
IMPLICIT CHARACTER*5 (h-z)
CHARACTER*5 f
CHARACTER*5 bad, good
parameter(bad="a", good="(a)")
PRINT ('a'), "hello" ! { dg-error "Missing leading left parenthesis in format string" }
WRITE (*, ("a")) "error" ! { dg-error "Missing leading left parenthesis in format string" }
PRINT 'a', "hello" ! { dg-error "Missing leading left parenthesis in format string" }
WRITE (*, "a") "error" ! { dg-error "Missing leading left parenthesis in format string" }
WRITE (*, bad) "error" ! { dg-error "Missing leading left parenthesis in format string" }
PRINT 'a' // ', a', "err", "or" ! { dg-error "Missing leading left parenthesis in format string" }
PRINT '(' // 'a' ! { dg-error "Unexpected end of format string in format string" }
! the following are ok
PRINT "(2f5.3)", bar, foo
PRINT ' (a)', "hello"
WRITE (*, " ((a))") "hello"
print "(a" // ")", "all is fine"
print good, "great"
! verify that we haven't broken non-constant expressions
f = "(f5.3)"
print f, 3.14159
print (f), 2.71813
print implicitly_typed, "something"
write (*, implicitly_typed_as_well) "something else"
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