Really fix 'potential unsafe sign check of a bitwise operation' code defect
authorIvan Maidanski <ivmai@mail.ru>
Tue, 4 Sep 2018 21:45:41 +0000 (00:45 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 4 Sep 2018 21:45:41 +0000 (00:45 +0300)
(fix of commit af00c4d)

* mark.c [!OS2] (GC_mark_from): Replace (signed_word)v>=0 to (v&SIGNB)==0
(anyway, the compiler generates the same code).

mark.c

diff --git a/mark.c b/mark.c
index 1159e3d..b1d5902 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -650,8 +650,8 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack,
 # ifdef OS2 /* Use untweaked version to circumvent compiler problem */
     while ((word)mark_stack_top >= (word)mark_stack && credit >= 0)
 # else
-    while ((signed_word)(((word)mark_stack_top - (word)mark_stack)
-                         | (word)credit) >= 0)
+    while (((((word)mark_stack_top - (word)mark_stack) | (word)credit)
+            & SIGNB) == 0)
 # endif
   {
     current_p = mark_stack_top -> mse_start;