Fixed VG_(ssort)(), which was broken for the size != {1,2,4} general case.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1933 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vg_mylibc.c b/coregrind/vg_mylibc.c
index 5aa4c09..92addf4 100644
--- a/coregrind/vg_mylibc.c
+++ b/coregrind/vg_mylibc.c
@@ -1550,18 +1550,15 @@
    #define SORT \
    for ( ; hp >= 0; hp--) { \
       h = incs[hp]; \
-      i = lo + h; \
-      while (1) { \
-         if (i > hi) break; \
+      for (i = lo + h; i <= hi; i++) { \
          ASSIGN(v,0, a,i); \
          j = i; \
-        while (COMPAR(a,(j-h), v,0) > 0) { \
+         while (COMPAR(a,(j-h), v,0) > 0) { \
             ASSIGN(a,j, a,(j-h)); \
             j = j - h; \
             if (j <= (lo + h - 1)) break; \
          } \
          ASSIGN(a,j, v,0); \
-         i++; \
       } \
    }
 
@@ -1596,16 +1593,14 @@
 
    // General case
    } else {
-      void* a = (void*)base;
-      Char  vc[size];      // will be at least 'size' bytes
-      void* v = (void*)vc;
+      char* a = base;
+      char  v[size];      // will be at least 'size' bytes
 
       #define ASSIGN(dst, dsti, src, srci) \
-      VG_(memcpy)( (void*)((dst) + size*(dsti)), \
-                   (void*)((src) + size*(srci)), (size) );
+      VG_(memcpy)( &dst[size*(dsti)], &src[size*(srci)], size );
 
       #define COMPAR(dst, dsti, src, srci) \
-      compar( (void*)((dst) + size*(dsti)), (void*)((src) + size*(srci)) )
+      compar( &dst[size*(dsti)], &src[size*(srci)] )
 
       SORT;