Skip to content

Commit 9fbd135

Browse files
committed
IdDict: handle size zero inputs gracefully
1 parent d825de8 commit 9fbd135

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

src/gf.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -418,11 +418,11 @@ static void foreach_mtable_in_module(
418418
jl_module_t *m,
419419
void (*visit)(jl_methtable_t *mt, void *env),
420420
void *env,
421-
jl_array_t *visited)
421+
jl_array_t **visited)
422422
{
423423
size_t i;
424424
void **table = m->bindings.table;
425-
jl_eqtable_put(visited, (jl_value_t*)m, jl_true, NULL);
425+
*visited = jl_eqtable_put(*visited, (jl_value_t*)m, jl_true, NULL);
426426
for (i = 1; i < m->bindings.size; i += 2) {
427427
if (table[i] != HT_NOTFOUND) {
428428
jl_binding_t *b = (jl_binding_t*)table[i];
@@ -440,7 +440,7 @@ static void foreach_mtable_in_module(
440440
else if (jl_is_module(v)) {
441441
jl_module_t *child = (jl_module_t*)v;
442442
if (child != m && child->parent == m && child->name == b->name &&
443-
!jl_eqtable_get(visited, v, NULL)) {
443+
!jl_eqtable_get(*visited, v, NULL)) {
444444
// this is the original/primary binding for the submodule
445445
foreach_mtable_in_module(child, visit, env, visited);
446446
}
@@ -463,11 +463,11 @@ void jl_foreach_reachable_mtable(void (*visit)(jl_methtable_t *mt, void *env), v
463463
jl_module_t *m = (jl_module_t*)jl_array_ptr_ref(mod_array, i);
464464
assert(jl_is_module(m));
465465
if (!jl_eqtable_get(visited, (jl_value_t*)m, NULL))
466-
foreach_mtable_in_module(m, visit, env, visited);
466+
foreach_mtable_in_module(m, visit, env, &visited);
467467
}
468468
}
469469
else {
470-
foreach_mtable_in_module(jl_main_module, visit, env, visited);
470+
foreach_mtable_in_module(jl_main_module, visit, env, &visited);
471471
}
472472
JL_GC_POP();
473473
}

src/iddict.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ static int jl_table_assign_bp(jl_array_t **pa, jl_value_t *key, jl_value_t *val)
3737
jl_array_t *a = *pa;
3838
size_t orig, index, iter, empty_slot;
3939
size_t newsz, sz = hash_size(a);
40-
assert(sz >= 1);
40+
if (sz == 0) {
41+
a = jl_alloc_vec_any(HT_N_INLINE);
42+
sz = hash_size(a);
43+
*pa = a;
44+
}
4145
size_t maxprobe = max_probe(sz);
4246
void **tab = (void **)a->data;
4347

@@ -108,7 +112,8 @@ static int jl_table_assign_bp(jl_array_t **pa, jl_value_t *key, jl_value_t *val)
108112
jl_value_t **jl_table_peek_bp(jl_array_t *a, jl_value_t *key) JL_NOTSAFEPOINT
109113
{
110114
size_t sz = hash_size(a);
111-
assert(sz >= 1);
115+
if (sz == 0)
116+
return NULL;
112117
size_t maxprobe = max_probe(sz);
113118
void **tab = (void **)a->data;
114119
uint_t hv = keyhash(key);

0 commit comments

Comments
 (0)