Commit 9aceacac by Tobias Burnus Committed by Tobias Burnus

re PR fortran/29452 (Keyword check for specifiers in WRITE and READ)

fortran/
2006-10-30  Tobias Burnus  <burnus@net-b.de>

       	PR fortran/29452
       	* io.c (check_io_constraints): Fix keyword string comparison.

libgfortran/
2006-10-30  Tobias Burnus  <burnus@net-b.de>

       	PR fortran/29452
	* runtime/string.c (compare0): Check whether string lengths match.

testsuite/
2006-10-30  Tobias Burnus  <burnus@net-b.de>

	PR fortran/29452
	* gfortran.dg/write_check.f90: Check run-time keyword checking.
	* gfortran.dg/write_check2.f90: Check compile-time keyword checking

From-SVN: r118191
parent e1efef1e
2006-10-30 Tobias Burnus <burnus@net-b.de>
PR fortran/29452
* io.c (check_io_constraints): Fix keyword string comparison.
2006-10-30 Andrew Pinski <pinskia@gmail.com> 2006-10-30 Andrew Pinski <pinskia@gmail.com>
PR fortran/29410 PR fortran/29410
...@@ -149,7 +154,7 @@ ...@@ -149,7 +154,7 @@
* io.c (gfc_match_close): Ensure that status is terminated by * io.c (gfc_match_close): Ensure that status is terminated by
a NULL element. a NULL element.
2006-10-16 Tobias Burnus <burnus@net-b.de> 2006-10-16 Tobias Burnus <burnus@net-b.de>
* trans-stmt.c: Fix a typo * trans-stmt.c: Fix a typo
* invoke.texi: Fix typos * invoke.texi: Fix typos
......
...@@ -2701,8 +2701,8 @@ if (condition) \ ...@@ -2701,8 +2701,8 @@ if (condition) \
if (expr->expr_type == EXPR_CONSTANT && expr->ts.type == BT_CHARACTER) if (expr->expr_type == EXPR_CONSTANT && expr->ts.type == BT_CHARACTER)
{ {
const char * advance = expr->value.character.string; const char * advance = expr->value.character.string;
not_no = strncasecmp (advance, "no", 2) != 0; not_no = strcasecmp (advance, "no") != 0;
not_yes = strncasecmp (advance, "yes", 2) != 0; not_yes = strcasecmp (advance, "yes") != 0;
} }
else else
{ {
......
2006-10-30 Tobias Burnus <burnus@net-b.de>
PR fortran/29452
* gfortran.dg/write_check.f90: Check run-time keyword checking.
* gfortran.dg/write_check2.f90: Check compile-time keyword checking.
2006-10-30 Andrew Pinski <pinskia@gmail.com> 2006-10-30 Andrew Pinski <pinskia@gmail.com>
PR Fortran/29410 PR Fortran/29410
! { dg-do run }
! { dg-shouldfail "Compile-time specifier checking" }
! Check keyword checking for specifiers
! PR fortran/29452
program test
implicit none
character(len=5) :: str
str = 'yes'
write(*,'(a)',advance=str) ''
str = 'no'
write(*,'(a)',advance=str) ''
str = 'NOT'
write(*,'(a)',advance=str) ''
end program test
! { dg-output "At line 13 of file.*" }
! { dg-output "Bad ADVANCE parameter in data transfer statement" }
! { dg-do compile }
! Check keyword checking for specifiers
! PR fortran/29452
character(len=20) :: str
write(13,'(a)',advance='yes') 'Hello:'
write(13,'(a)',advance='no') 'Hello:'
write(13,'(a)',advance='y') 'Hello:' ! { dg-error "ADVANCE=specifier at \\(1\\) must have value = YES or NO." }
write(13,'(a)',advance='yet') 'Hello:' ! { dg-error "ADVANCE=specifier at \\(1\\) must have value = YES or NO." }
write(13,'(a)',advance='yess') 'Hello:' ! { dg-error "ADVANCE=specifier at \\(1\\) must have value = YES or NO." }
end
2006-10-30 Tobias Burnus <burnus@net-b.de>
PR fortran/29452
* runtime/string.c (compare0): Check whether string lengths match.
2006-10-29 Francois-Xavier Coudert <coudert@clipper.ens.fr> 2006-10-29 Francois-Xavier Coudert <coudert@clipper.ens.fr>
* configure: Regenerate. * configure: Regenerate.
......
...@@ -44,6 +44,7 @@ compare0 (const char *s1, int s1_len, const char *s2) ...@@ -44,6 +44,7 @@ compare0 (const char *s1, int s1_len, const char *s2)
/* Strip trailing blanks from the Fortran string. */ /* Strip trailing blanks from the Fortran string. */
len = fstrlen (s1, s1_len); len = fstrlen (s1, s1_len);
if(len != strlen(s2)) return 0; /* don't match */
return strncasecmp (s1, s2, len) == 0; return strncasecmp (s1, s2, len) == 0;
} }
......
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