Fix unsigned type overflow in memory report.
authorMartin Liska <mliska@suse.cz>
Tue, 29 Oct 2019 08:45:06 +0000 (09:45 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Tue, 29 Oct 2019 08:45:06 +0000 (08:45 +0000)
2019-10-29  Martin Liska  <mliska@suse.cz>

* ggc-common.c: One can't subtract unsigned types
in compare function.

From-SVN: r277560

gcc/ChangeLog
gcc/ggc-common.c

index 51097bb..b6eeead 100644 (file)
@@ -1,5 +1,10 @@
 2019-10-29  Martin Liska  <mliska@suse.cz>
 
+       * ggc-common.c: One can't subtract unsigned types
+       in compare function.
+
+2019-10-29  Martin Liska  <mliska@suse.cz>
+
        * cgraphunit.c (symbol_table::compile): Pass
        title as dump_memory_report argument.
        * toplev.c (dump_memory_report):  New argument.
index 37d3c5d..48db420 100644 (file)
@@ -928,10 +928,13 @@ public:
   static int
   compare (const void *first, const void *second)
   {
-    const mem_pair_t f = *(const mem_pair_t *)first;
-    const mem_pair_t s = *(const mem_pair_t *)second;
+    const mem_pair_t mem1 = *(const mem_pair_t *) first;
+    const mem_pair_t mem2 = *(const mem_pair_t *) second;
 
-    return s.second->get_balance () - f.second->get_balance ();
+    size_t balance1 = mem1.second->get_balance ();
+    size_t balance2 = mem2.second->get_balance ();
+
+    return balance1 == balance2 ? 0 : (balance1 < balance2 ? 1 : -1);
   }
 
   /* Dump header with NAME.  */