ruby-changes:71669
From: Nobuyoshi <ko1@a...>
Date: Thu, 7 Apr 2022 21:31:51 +0900 (JST)
Subject: [ruby-changes:71669] 7b1ece9b94 (master): Get rid of type-punning pointer casts
https://git.ruby-lang.org/ruby.git/commit/?id=7b1ece9b94 From 7b1ece9b9490a892861f2336ae41d611a06bdf2b Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Thu, 7 Apr 2022 19:19:13 +0900 Subject: Get rid of type-punning pointer casts --- ractor.c | 24 ++++++++++++------------ vm_method.c | 3 ++- win32/win32.c | 2 +- yjit_codegen.c | 6 +++--- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/ractor.c b/ractor.c index 0c17d575ee..96c51eca70 100644 --- a/ractor.c +++ b/ractor.c @@ -2706,7 +2706,7 @@ obj_refer_only_shareables_p(VALUE obj) https://github.com/ruby/ruby/blob/trunk/ractor.c#L2706 static int obj_traverse_replace_i(VALUE obj, struct obj_traverse_replace_data *data) { - VALUE replacement; + st_data_t replacement; if (RB_SPECIAL_CONST_P(obj)) { data->replacement = obj; @@ -2719,14 +2719,14 @@ obj_traverse_replace_i(VALUE obj, struct obj_traverse_replace_data *data) https://github.com/ruby/ruby/blob/trunk/ractor.c#L2719 case traverse_stop: return 1; // stop search } - replacement = data->replacement; + replacement = (st_data_t)data->replacement; - if (UNLIKELY(st_lookup(obj_traverse_replace_rec(data), (st_data_t)obj, (st_data_t *)&replacement))) { - data->replacement = replacement; + if (UNLIKELY(st_lookup(obj_traverse_replace_rec(data), (st_data_t)obj, &replacement))) { + data->replacement = (VALUE)replacement; return 0; } else { - st_insert(obj_traverse_replace_rec(data), (st_data_t)obj, (st_data_t)replacement); + st_insert(obj_traverse_replace_rec(data), (st_data_t)obj, replacement); } if (!data->move) { @@ -2872,7 +2872,7 @@ obj_traverse_replace_i(VALUE obj, struct obj_traverse_replace_data *data) https://github.com/ruby/ruby/blob/trunk/ractor.c#L2872 rb_bug("unreachable"); } - data->replacement = replacement; + data->replacement = (VALUE)replacement; if (data->leave_func(obj, data) == traverse_stop) { return 1; @@ -3052,9 +3052,9 @@ ractor_local_storage_mark(rb_ractor_t *r) https://github.com/ruby/ruby/blob/trunk/ractor.c#L3052 for (int i=0; i<freed_ractor_local_keys.cnt; i++) { rb_ractor_local_key_t key = freed_ractor_local_keys.keys[i]; - st_data_t val; - if (st_delete(r->local_storage, (st_data_t *)&key, &val) && - key->type->free) { + st_data_t val, k = (st_data_t)key; + if (st_delete(r->local_storage, &k, &val) && + (key = (rb_ractor_local_key_t)k)->type->free) { (*key->type->free)((void *)val); } } @@ -3179,9 +3179,9 @@ ractor_local_set(rb_ractor_local_key_t key, void *ptr) https://github.com/ruby/ruby/blob/trunk/ractor.c#L3179 VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key) { - VALUE val; - if (ractor_local_ref(key, (void **)&val)) { - return val; + void *val; + if (ractor_local_ref(key, &val)) { + return (VALUE)val; } else { return Qnil; diff --git a/vm_method.c b/vm_method.c index 36a2c15e4b..c4b95f9391 100644 --- a/vm_method.c +++ b/vm_method.c @@ -1021,8 +1021,9 @@ rb_vm_lookup_overloaded_cme(const rb_callable_method_entry_t *cme) https://github.com/ruby/ruby/blob/trunk/vm_method.c#L1021 static void delete_overloaded_cme(const rb_callable_method_entry_t *cme) { + st_data_t cme_data = (st_data_t)cme; ASSERT_vm_locking(); - st_delete(overloaded_cme_table(), (st_data_t *)&cme, NULL); + st_delete(overloaded_cme_table(), &cme_data, NULL); } static const rb_callable_method_entry_t * diff --git a/win32/win32.c b/win32/win32.c index c202e65e92..7f879b397f 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -855,7 +855,7 @@ socklist_lookup(SOCKET sock, int *flagp) https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L855 thread_exclusive(socklist) { if (!socklist) continue; - ret = st_lookup(socklist, (st_data_t)sock, (st_data_t *)&data); + ret = st_lookup(socklist, (st_data_t)sock, &data); if (ret && flagp) *flagp = (int)data; } diff --git a/yjit_codegen.c b/yjit_codegen.c index aef5c0790d..cd46685b57 100644 --- a/yjit_codegen.c +++ b/yjit_codegen.c @@ -3212,9 +3212,9 @@ jit_thread_s_current(jitstate_t *jit, ctx_t *ctx, const struct rb_callinfo *ci, https://github.com/ruby/ruby/blob/trunk/yjit_codegen.c#L3212 static method_codegen_t lookup_cfunc_codegen(const rb_method_definition_t *def) { - method_codegen_t gen_fn; - if (st_lookup(yjit_method_codegen_table, def->method_serial, (st_data_t *)&gen_fn)) { - return gen_fn; + st_data_t gen_fn; + if (st_lookup(yjit_method_codegen_table, def->method_serial, &gen_fn)) { + return (method_codegen_t)gen_fn; } return NULL; } -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/