diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 786b6cae445c..96c5729e5341 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2006-05-28 Thomas Koenig + + * 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 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 000000000000..2e6eb1b2b88f --- /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 4a31e484a2c1..50ebaf230c06 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2006-05-28 Thomas Koenig + + * 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 * 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 eed41d71c8a0..1bc4ff220122 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;