diff --git a/internal.h b/internal.h index e986098a56a724..fcaffa26be1233 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 b8895a53a511f6..916715e23fef96 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; }