diff options
Diffstat (limited to 'yjit_core.c')
-rw-r--r-- | yjit_core.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/yjit_core.c b/yjit_core.c index 3f866b0a2b..5389f3af5f 100644 --- a/yjit_core.c +++ b/yjit_core.c @@ -266,6 +266,15 @@ void ctx_set_local_type(ctx_t* ctx, size_t idx, val_type_t type) if (idx >= MAX_LOCAL_TYPES) return; + // If any values on the stack map to this local we must detach them + for (int i = 0; i < MAX_TEMP_TYPES; i++) { + temp_mapping_t *mapping = &ctx->temp_mapping[i]; + if (mapping->kind == TEMP_LOCAL && mapping->idx == idx) { + ctx->temp_types[i] = ctx->local_types[mapping->idx]; + *mapping = MAP_STACK; + } + } + ctx->local_types[idx] = type; } |