aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuhiro NISHIYAMA <zn@mbf.nifty.com>2019-05-29 13:12:15 +0900
committerKazuhiro NISHIYAMA <zn@mbf.nifty.com>2019-05-29 13:16:05 +0900
commitaee36bf149bedf97007584ac5d6cd5d438be28b5 (patch)
treef2f2525ed7cc8e73534acc4332a372ae957932fa
parente04d10b28f47ea4d32f9562aedc4be9749415219 (diff)
downloadruby-aee36bf149bedf97007584ac5d6cd5d438be28b5.tar.gz
Fix Possible Control flow issues (DEADCODE)
Coverity Scan says `Execution cannot reach this statement: "poison_object(v);"`, so do nothing when `ptr` is always 0 without address_sanitizer.
-rw-r--r--internal.h8
-rw-r--r--iseq.c8
2 files changed, 10 insertions, 6 deletions
diff --git a/internal.h b/internal.h
index e986098a56..fcaffa26be 100644
--- a/internal.h
+++ b/internal.h
@@ -155,6 +155,14 @@ asan_poison_object(VALUE obj)
asan_poison_memory_region(ptr, SIZEOF_VALUE);
}
+#if !__has_feature(address_sanitizer)
+#define asan_poison_object_if(ptr, obj) ((void)(ptr), (void)(obj))
+#else
+#define asan_poison_object_if(ptr, obj) do { \
+ if (ptr) asan_poison_object(obj); \
+ } while (0)
+#endif
+
/*!
* This function predicates if the given object is fully addressable or not.
*
diff --git a/iseq.c b/iseq.c
index b8895a53a5..916715e23f 100644
--- a/iseq.c
+++ b/iseq.c
@@ -1087,9 +1087,7 @@ remove_coverage_i(void *vstart, void *vend, size_t stride, void *data)
ISEQ_COVERAGE_SET(iseq, Qnil);
}
- if (ptr) {
- asan_poison_object(v);
- }
+ asan_poison_object_if(ptr, v);
}
return 0;
}
@@ -3239,9 +3237,7 @@ trace_set_i(void *vstart, void *vend, size_t stride, void *data)
rb_iseq_trace_set(rb_iseq_check((rb_iseq_t *)v), turnon_events);
}
- if (ptr) {
- asan_poison_object(v);
- }
+ asan_poison_object_if(ptr, v);
}
return 0;
}