Eliminate 'potential unsafe sign check of a bitwise operation' code defect
authorIvan Maidanski <ivmai@mail.ru>
Fri, 31 Aug 2018 16:14:18 +0000 (19:14 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 31 Aug 2018 16:14:18 +0000 (19:14 +0300)
* mark.c [!OS2] (GC_mark_from): Cast mark_stack_top-mark_stack to word
first, and cast bitwise OR operation result to signed_word, so that not
to apply bitwise OR operation to the value of ptrdiff_t.

mark.c

diff --git a/mark.c b/mark.c
index ee6dc83..1159e3d 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -650,7 +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 ((((ptr_t)mark_stack_top - (ptr_t)mark_stack) | credit) >= 0)
+    while ((signed_word)(((word)mark_stack_top - (word)mark_stack)
+                         | (word)credit) >= 0)
 # endif
   {
     current_p = mark_stack_top -> mse_start;