summaryrefslogtreecommitdiff
path: root/iseq.c
diff options
context:
space:
mode:
Diffstat (limited to 'iseq.c')
-rw-r--r--iseq.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/iseq.c b/iseq.c
index f2a2bdedda..b16369e420 100644
--- a/iseq.c
+++ b/iseq.c
@@ -126,6 +126,14 @@ remove_from_constant_cache(ID id, IC ic)
static void
iseq_clear_ic_references(const rb_iseq_t *iseq)
{
+ // In some cases (when there is a compilation error), we end up with
+ // ic_size greater than 0, but no allocated is_entries buffer.
+ // If there's no is_entries buffer to loop through, return early.
+ // [Bug #19173]
+ if (!ISEQ_BODY(iseq)->is_entries) {
+ return;
+ }
+
for (unsigned int ic_idx = 0; ic_idx < ISEQ_BODY(iseq)->ic_size; ic_idx++) {
IC ic = &ISEQ_IS_IC_ENTRY(ISEQ_BODY(iseq), ic_idx);