re PR libfortran/30525 ([4.2, 4.1 only] character comparisons with padding)
authorThomas Koenig <Thomas.Koenig@online.de>
Sun, 21 Jan 2007 20:51:53 +0000 (20:51 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 21 Jan 2007 20:51:53 +0000 (20:51 +0000)
2007-01-21  Thomas Koenig  <Thomas.Koenig@online.de>

PR libfortran/30525
* intrinsics/string_intrinsics.c(compare_string):  Make
sure that comparisons are done unsigned.

2007-01-21  Thomas Koenig  <Thomas.Koenig@online.de>

PR libfortran/30525
* gfortran.dg/char_comparison_1.f:  New test.

From-SVN: r121035

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/char_comparison_1.f [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/intrinsics/string_intrinsics.c

index d248286770ee9dc6a567df31d53b70584f49b808..e92e40bcf4f70e3bf3602977422a776436071d88 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-21  Thomas Koenig  <Thomas.Koenig@online.de>
+
+       PR libfortran/30525
+       * gfortran.dg/char_comparison_1.f:  New test.
+
 2007-01-21  Ira Rosen  <irar@il.ibm.com> 
 
        * gcc.dg/vect/vect-strided-same-dr.c: New test. 
diff --git a/gcc/testsuite/gfortran.dg/char_comparison_1.f b/gcc/testsuite/gfortran.dg/char_comparison_1.f
new file mode 100644 (file)
index 0000000..9a316b7
--- /dev/null
@@ -0,0 +1,26 @@
+C { dg-do run }
+C     PR 30525 - comparisons with padded spaces were done
+C     signed.
+      program main
+      character*2 c2
+      character*1 c1, c3, c4
+C
+C  Comparison between char(255) and space padding
+C
+      c2 = 'a' // char(255)
+      c1 = 'a'
+      if (.not. (c2 .gt. c1)) call abort
+C
+C  Comparison between char(255) and space
+C
+      c3 = ' '
+      c4 = char(255)
+      if (.not. (c4 .gt. c3)) call abort
+
+C
+C  Check constant folding
+C
+      if (.not. ('a' // char(255) .gt. 'a')) call abort
+
+      if (.not. (char(255) .gt. 'a')) call abort
+      end
index d81546ff47e02fc0ff261ca0f8c233170d37446d..f12f83ee441d4a61a221e64b05b00b51899ea303 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-21  Thomas Koenig  <Thomas.Koenig@online.de>
+
+       PR libfortran/30525
+       * intrinsics/string_intrinsics.c(compare_string):  Make
+       sure that comparisons are done unsigned.
+
 2006-12-09  Tobias Burnus  <burnus@net-b.de>
 
        PR libfortran/30015
index fdaddef33271418488730d1eb54b1dff80e0c5d4..e432987dcad049ef15f5df099138d1bbbb70de74 100644 (file)
@@ -83,7 +83,7 @@ compare_string (GFC_INTEGER_4 len1, const char * s1,
                GFC_INTEGER_4 len2, const char * s2)
 {
   int res;
-  const char *s;
+  const unsigned char *s;
   int len;
 
   res = memcmp (s1, s2, (len1 < len2) ? len1 : len2);
@@ -96,13 +96,13 @@ compare_string (GFC_INTEGER_4 len1, const char * s1,
   if (len1 < len2)
     {
       len = len2 - len1;
-      s = &s2[len1];
+      s = (unsigned char *) &s2[len1];
       res = -1;
     }
   else
     {
       len = len1 - len2;
-      s = &s1[len2];
+      s = (unsigned char *) &s1[len2];
       res = 1;
     }