From: Ivan Maidanski Date: Tue, 10 Sep 2019 20:35:14 +0000 (+0300) Subject: Workaround 'redundant initialization for r' cppcheck false positive X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe3a50824e878995999462843aff679d52e9f61b;p=gc Workaround 'redundant initialization for r' cppcheck false positive * mark.c (GC_mark_and_push_stack): Replace "if(a&&b)" with "if(a) if(b)" where b is an expression which contains r variable assignment. --- diff --git a/mark.c b/mark.c index 4d702a93..0a1d1394 100644 --- a/mark.c +++ b/mark.c @@ -1483,12 +1483,13 @@ GC_API struct GC_ms_entry * GC_CALL GC_mark_and_push(void *obj, PREFETCH(p); GET_HDR(p, hhdr); - if (EXPECT(IS_FORWARDING_ADDR_OR_NIL(hhdr), FALSE) - && (NULL == hhdr + if (EXPECT(IS_FORWARDING_ADDR_OR_NIL(hhdr), FALSE)) { + if (NULL == hhdr || (r = (ptr_t)GC_base(p)) == NULL - || (hhdr = HDR(r)) == NULL)) { + || (hhdr = HDR(r)) == NULL) { GC_ADD_TO_BLACK_LIST_STACK(p, source); return; + } } if (EXPECT(HBLK_IS_FREE(hhdr), FALSE)) { GC_ADD_TO_BLACK_LIST_NORMAL(p, source);