gcc_qsort: avoid overlapping memcpy (PR 86311)
authorAlexander Monakov <amonakov@ispras.ru>
Mon, 25 Jun 2018 17:44:15 +0000 (20:44 +0300)
committerAlexander Monakov <amonakov@gcc.gnu.org>
Mon, 25 Jun 2018 17:44:15 +0000 (20:44 +0300)
PR middle-end/86311
* sort.cc (REORDER_23): Avoid memcpy with same destination and source.
(REORDER_45): Likewise.

From-SVN: r262092

gcc/ChangeLog
gcc/sort.cc

index ceec833bb708204bb476de2586438933f0051dbf..a837cae287e054d5daf4fb84755b29a542f98aea 100644 (file)
@@ -1,3 +1,9 @@
+2018-06-25  Alexander Monakov  <amonakov@ispras.ru>
+
+       PR middle-end/86311
+       * sort.cc (REORDER_23): Avoid memcpy with same destination and source.
+       (REORDER_45): Likewise.
+
 2018-06-25  Jeff Law  <law@redhat.com>
 
        * config/v850/v850.md (divmodhi4): Make sure to sign extend the
index a48a477d4e8c17e42599e8c77c594bbeef5352cf..293e2058f8944c66c60f56cf15c14f2ec4381182 100644 (file)
@@ -69,7 +69,7 @@ do {                                                     \
   memcpy (&t1, e1 + OFFSET, sizeof (TYPE));              \
   char *out = c->out + OFFSET;                           \
   if (likely (c->n == 3))                                \
-    memcpy (out + 2*STRIDE, e2 + OFFSET, sizeof (TYPE)); \
+    memmove (out + 2*STRIDE, e2 + OFFSET, sizeof (TYPE));\
   memcpy (out, &t0, sizeof (TYPE)); out += STRIDE;       \
   memcpy (out, &t1, sizeof (TYPE));                      \
 } while (0)
@@ -101,7 +101,7 @@ do {                                                     \
   memcpy (&t3, e3 + OFFSET, sizeof (TYPE));              \
   char *out = c->out + OFFSET;                           \
   if (likely (c->n == 5))                                \
-    memcpy (out + 4*STRIDE, e4 + OFFSET, sizeof (TYPE)); \
+    memmove (out + 4*STRIDE, e4 + OFFSET, sizeof (TYPE));\
   memcpy (out, &t0, sizeof (TYPE)); out += STRIDE;       \
   memcpy (out, &t1, sizeof (TYPE)); out += STRIDE;       \
   memcpy (out, &t2, sizeof (TYPE)); out += STRIDE;       \