From bc653e6beb45e546fda7659bb1a520785431e9fa Mon Sep 17 00:00:00 2001 From: burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Mon, 30 Oct 2006 18:22:47 +0000 Subject: [PATCH] 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 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118191 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 7 ++++++- gcc/fortran/io.c | 4 ++-- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gfortran.dg/write_check.f90 | 16 ++++++++++++++++ gcc/testsuite/gfortran.dg/write_check2.f90 | 10 ++++++++++ libgfortran/ChangeLog | 5 +++++ libgfortran/runtime/string.c | 1 + 7 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/write_check.f90 create mode 100644 gcc/testsuite/gfortran.dg/write_check2.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 25ace324b404..f6ea47990e64 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +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> PR fortran/29410 @@ -149,7 +154,7 @@ * io.c (gfc_match_close): Ensure that status is terminated by 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 * invoke.texi: Fix typos diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index cbb7cf90b062..ae9df4a967b6 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -2701,8 +2701,8 @@ if (condition) \ if (expr->expr_type == EXPR_CONSTANT && expr->ts.type == BT_CHARACTER) { const char * advance = expr->value.character.string; - not_no = strncasecmp (advance, "no", 2) != 0; - not_yes = strncasecmp (advance, "yes", 2) != 0; + not_no = strcasecmp (advance, "no") != 0; + not_yes = strcasecmp (advance, "yes") != 0; } else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f8876e353d7d..f9da3e8885b7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +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> PR Fortran/29410 diff --git a/gcc/testsuite/gfortran.dg/write_check.f90 b/gcc/testsuite/gfortran.dg/write_check.f90 new file mode 100644 index 000000000000..4172303926a3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/write_check.f90 @@ -0,0 +1,16 @@ +! { 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" } diff --git a/gcc/testsuite/gfortran.dg/write_check2.f90 b/gcc/testsuite/gfortran.dg/write_check2.f90 new file mode 100644 index 000000000000..52f32bb121c8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/write_check2.f90 @@ -0,0 +1,10 @@ +! { 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 diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 82db785e1b58..6dd8270db225 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +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> * configure: Regenerate. diff --git a/libgfortran/runtime/string.c b/libgfortran/runtime/string.c index 00dfc2983051..a92082f73ee9 100644 --- a/libgfortran/runtime/string.c +++ b/libgfortran/runtime/string.c @@ -44,6 +44,7 @@ compare0 (const char *s1, int s1_len, const char *s2) /* Strip trailing blanks from the Fortran string. */ len = fstrlen (s1, s1_len); + if(len != strlen(s2)) return 0; /* don't match */ return strncasecmp (s1, s2, len) == 0; } -- GitLab