]> granicus.if.org Git - gc/commitdiff
Fix 'bogus LR' detection in FindTopOfStack (Darwin)
authorIvan Maidanski <ivmai@mail.ru>
Wed, 7 Dec 2016 08:02:59 +0000 (11:02 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 6 Feb 2017 18:38:58 +0000 (21:38 +0300)
(fix commit 5742f86)

* darwin_stop_world.c [!DARWIN_DONT_PARSE_STACK] (GC_FindTopOfStack):
Use "UL" suffix (instead of "U") for 0x3 (on the right side of the
comparison) to avoid implicit unsigned int-to-long value extension
of "~" operator result.

darwin_stop_world.c

index 5887e7baeda693e25dcf21ed9a090ec3317f18a0..be9f43f721890d147b44685f26c1b9c0b70512d0 100644 (file)
@@ -79,7 +79,7 @@ GC_INNER ptr_t GC_FindTopOfStack(unsigned long stack_start)
     /* we do these next two checks after going to the next frame
        because the LR for the first stack frame in the loop
        is not set up on purpose, so we shouldn't check it. */
-    if ((frame->savedLR & ~0x3) == 0 || (frame->savedLR & ~0x3) == ~0x3U)
+    if ((frame->savedLR & ~0x3) == 0 || (frame->savedLR & ~0x3) == ~0x3UL)
       break; /* if the next LR is bogus, stop */
   }
 # ifdef DEBUG_THREADS_EXTRA