diff options
author | Kazuhiro NISHIYAMA <zn@mbf.nifty.com> | 2019-05-29 13:12:15 +0900 |
---|---|---|
committer | Kazuhiro NISHIYAMA <zn@mbf.nifty.com> | 2019-05-29 13:16:05 +0900 |
commit | aee36bf149bedf97007584ac5d6cd5d438be28b5 (patch) | |
tree | f2f2525ed7cc8e73534acc4332a372ae957932fa | |
parent | e04d10b28f47ea4d32f9562aedc4be9749415219 (diff) | |
download | ruby-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.h | 8 | ||||
-rw-r--r-- | iseq.c | 8 |
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. * @@ -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; } |