diff options
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/string_null_compare_1.f | 15 | ||||
-rw-r--r-- | libgfortran/ChangeLog | 6 | ||||
-rw-r--r-- | libgfortran/intrinsics/string_intrinsics.c | 2 |
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 786b6ca..96c5729 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2006-05-28 Thomas Koenig <Thomas.Koenig@online.de> + + * intrinsics/string_intrinsics.c (compare_string): + Use memcmp instead of strncmp to avoid tripping over + CHAR(0) in a string. + 2006-05-27 Richard Guenther <rguenther@suse.de> PR middle-end/27773 diff --git a/gcc/testsuite/gfortran.dg/string_null_compare_1.f b/gcc/testsuite/gfortran.dg/string_null_compare_1.f new file mode 100644 index 0000000..2e6eb1b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/string_null_compare_1.f @@ -0,0 +1,15 @@ +! { dg-do run } +! PR 27784 - Different strings should compare unequal even if they +! have CHAR(0) in them. + + program main + character*3 str1, str2 + call setval(str1, str2) + if (str1 == str2) call abort + end + + subroutine setval(str1, str2) + character*3 str1, str2 + str1 = 'a' // CHAR(0) // 'a' + str2 = 'a' // CHAR(0) // 'c' + end diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 4a31e48..50ebaf2 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2006-05-28 Thomas Koenig <Thomas.Koenig@online.de> + + * intrinsics/string_intrinsics.c (compare_string): + Use memcmp instead of strncmp to avoid tripping over + CHAR(0) in a string. + 2006-05-27 Janne Blomqvist <jb@gcc.gnu.org> * io/io.h (find_or_create_unit): Correct export declaration. diff --git a/libgfortran/intrinsics/string_intrinsics.c b/libgfortran/intrinsics/string_intrinsics.c index eed41d7..1bc4ff2 100644 --- a/libgfortran/intrinsics/string_intrinsics.c +++ b/libgfortran/intrinsics/string_intrinsics.c @@ -109,7 +109,7 @@ compare_string (GFC_INTEGER_4 len1, const char * s1, const char *s; int len; - res = strncmp (s1, s2, (len1 < len2) ? len1 : len2); + res = memcmp (s1, s2, (len1 < len2) ? len1 : len2); if (res != 0) return res; |