Skip to content

Commit e095bfe

Browse files
committed
fix analyzer confusing in typemap
The analyzer assumes that casts mean we used JL_GC_PUSHARGS. Simplify the code to store the values in separate variables.
1 parent cab871d commit e095bfe

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

src/typemap.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -286,20 +286,20 @@ static _Atomic(jl_value_t*) *mtcache_hash_lookup_bp(jl_genericmemory_t *cache JL
286286
return pml;
287287
}
288288

289-
static void mtcache_hash_insert(_Atomic(jl_genericmemory_t*) *cache, jl_value_t *parent, jl_value_t *key, jl_typemap_t *val)
289+
static void mtcache_hash_insert(_Atomic(jl_genericmemory_t*) *pcache, jl_value_t *parent, jl_value_t *key, jl_typemap_t *val)
290290
{
291291
int inserted = 0;
292-
jl_genericmemory_t *a = jl_atomic_load_relaxed(cache);
292+
jl_genericmemory_t *a = jl_atomic_load_relaxed(pcache);
293293
if (a == (jl_genericmemory_t*)jl_an_empty_memory_any) {
294294
a = jl_alloc_memory_any(16);
295-
jl_atomic_store_release(cache, a);
295+
jl_atomic_store_release(pcache, a);
296296
if (parent)
297297
jl_gc_wb(parent, a);
298298
}
299299
a = jl_eqtable_put(a, key, val, &inserted);
300300
assert(inserted);
301-
if (a != jl_atomic_load_relaxed(cache)) {
302-
jl_atomic_store_release(cache, a);
301+
if (a != jl_atomic_load_relaxed(pcache)) {
302+
jl_atomic_store_release(pcache, a);
303303
if (parent)
304304
jl_gc_wb(parent, a);
305305
}
@@ -1293,9 +1293,10 @@ static void jl_typemap_memory_insert_(
12931293
static jl_value_t *jl_method_convert_list_to_cache(
12941294
jl_typemap_t *map, jl_typemap_entry_t *ml, int8_t tparam, int8_t offs, int8_t doublesplit)
12951295
{
1296-
jl_value_t *cache = doublesplit ? jl_an_empty_memory_any : (jl_value_t*)jl_new_typemap_level();
1296+
_Atomic(jl_genericmemory_t*) dblcache = (jl_genericmemory_t*)jl_an_empty_memory_any;
1297+
jl_typemap_level_t *cache = doublesplit ? NULL : jl_new_typemap_level();
12971298
jl_typemap_entry_t *next = NULL;
1298-
JL_GC_PUSH3(&cache, &next, &ml);
1299+
JL_GC_PUSH4(&cache, &dblcache, &next, &ml);
12991300
while (ml != (void*)jl_nothing) {
13001301
next = jl_atomic_load_relaxed(&ml->next);
13011302
jl_atomic_store_relaxed(&ml->next, (jl_typemap_entry_t*)jl_nothing);
@@ -1316,14 +1317,14 @@ static jl_value_t *jl_method_convert_list_to_cache(
13161317
assert(jl_is_type_type(key));
13171318
key = jl_tparam0(key);
13181319
}
1319-
jl_typemap_memory_insert_(map, (_Atomic(jl_genericmemory_t*)*)&cache, key, ml, NULL, 0, offs, NULL);
1320+
jl_typemap_memory_insert_(map, &dblcache, key, ml, NULL, 0, offs, NULL);
13201321
}
13211322
else
1322-
jl_typemap_level_insert_(map, (jl_typemap_level_t*)cache, ml, offs);
1323+
jl_typemap_level_insert_(map, cache, ml, offs);
13231324
ml = next;
13241325
}
13251326
JL_GC_POP();
1326-
return cache;
1327+
return doublesplit ? (jl_value_t*)jl_atomic_load_relaxed(&dblcache) : (jl_value_t*)cache;
13271328
}
13281329

13291330
static void jl_typemap_list_insert_(

0 commit comments

Comments
 (0)