diff options
Diffstat (limited to 'ext/opcache/Optimizer/zend_call_graph.c')
| -rw-r--r-- | ext/opcache/Optimizer/zend_call_graph.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/ext/opcache/Optimizer/zend_call_graph.c b/ext/opcache/Optimizer/zend_call_graph.c index 6bfbfc049d..51b307bf5e 100644 --- a/ext/opcache/Optimizer/zend_call_graph.c +++ b/ext/opcache/Optimizer/zend_call_graph.c @@ -177,6 +177,10 @@ int zend_analyze_calls(zend_arena **arena, zend_script *script, uint32_t build_f call_info->num_args = -1; } break; + case ZEND_EXIT: + /* In this case the DO_CALL opcode may have been dropped + * and caller_call_opline will be NULL. */ + break; } opline++; } @@ -291,7 +295,9 @@ zend_call_info **zend_build_call_map(zend_arena **arena, zend_func_info *info, c for (call = info->callee_info; call; call = call->next_callee) { int i; map[call->caller_init_opline - op_array->opcodes] = call; - map[call->caller_call_opline - op_array->opcodes] = call; + if (call->caller_call_opline) { + map[call->caller_call_opline - op_array->opcodes] = call; + } for (i = 0; i < call->num_args; i++) { if (call->arg_info[i].opline) { map[call->arg_info[i].opline - op_array->opcodes] = call; |
